Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将十六进制值与整数相加?_C_Hex_Literals - Fatal编程技术网

C 如何将十六进制值与整数相加?

C 如何将十六进制值与整数相加?,c,hex,literals,C,Hex,Literals,在下面的代码中,变量“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' } #包括 int main() {

在下面的代码中,变量“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'
}
#包括
int main()
{
INTA、b、c;
a=015+0x71+5;
printf(“%d\n”,a);//打印'131'
b=15+0x71+5;
printf(“%d\n”,b);//打印'133'
}

有人能告诉我这里发生了什么吗?

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

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


(from)

015
实际上是八进制数字系统表示的指示器,所以

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

所以


严格地说,这意味着
(1*(8^1)+5*(8^0))+(7*(16^1)+1*(16^0))+(5*(10^0))=133

在这种情况下提到了
strtol
。八进制整数常量与所说的标准库函数无关。@user694733你是对的,我修改了它。十六进制=base 16=
0x{9-9A-Fa-f_234;+
,每个“数字”代表4位,八进制=base 8=
0[0-7_234;+
,每个数字代表3位。015是八进制。十六进制在计算机历史上赢得了胜利。
  a=015 + 0x71 +5;