【问题标题】:How adding a hexadecimal value with integer work? [duplicate]如何使用整数添加十六进制值? [复制]
【发布时间】:2015-11-27 18:34:15
【问题描述】:

在下面的代码中,变量“b”的值是“133”,这很简单。变量'a'怎么样?为什么是“131”?

我发现唯一的区别是“015”而不是“15”。

#include<stdio.h>
int main()
{
  int a,b,c;
  a=015 + 0x71 +5;
  printf("%d\n",a);  // prints '131'
  b=15 + 0x71 +5;
  printf("%d\n",b);  // prints '133'
}

谁能告诉我这里发生了什么?

【问题讨论】:

  • 十六进制 = base 16 = 0x{9-9A-Fa-f_]+,每个“数字”代表4位,八进制 = base 8 = 0[0-7_]+,每个数字代表 3 位。 015 是八进制。十六进制在计算机史上取得了胜利。

标签: c hex literals


【解决方案1】:

前导零表示数字以八进制表示。八进制的 015 是十进制的 13。

八进制文字是数字零 (0) 后跟零个或多个八进制数字 (0, 1, 2, 3, 4, 5, 6, 7)

(来自cppreference)

【讨论】:

  • 在这种情况下提到 strtol 是错误的。八进制整数常量与所述标准库函数无关。
  • @user694733 你说得对,我适应了。
【解决方案2】:

015其实是八进制表示的指标,所以

015 表示1x8^1 + 5*8^0 = 13

所以

  a=015 + 0x71 +5;

严格来说是指(1*(8^1) + 5*(8^0) ) + (7*(16^1) + 1*(16^0)) + (5*(10^0)) = 133

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-10
    • 2021-09-29
    • 2013-10-20
    • 2021-12-22
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多