为什么这个 printf 在 C 中打印出错误的数字表示形式?
why does this printf print out wrong representation of the number in C?
int n = 00000011;
printf("n is: %d\n", n);
x is: 9
十进制不应该是3吗?
00000011
是9
的八进制值,不能直接用二进制表示。
Octal 011 -> Decimal 9
只能指定十进制、八进制和十六进制表示,对于十进制表示,它很简单,对于八进制表示,您在值前加上 0
前缀,因此 09
无效,对于十六进制表示,您在值前加上 0x
.
注意:正如 abligh 所评论的,您可以将 0b
前缀与 gcc
和 clang
可能还有其他编译器。
在 c 中,以 0*digit* 开头的数字文字是 base-8。
对于二进制文件,一些编译器允许您以 0b 开头。
否则你必须手动将它们转换为十六进制或八进制。
#include <stdio.h>
int main(void){
int n=0b00000011;
printf ("n is %d\n",n);
return 0;
};
int n = 00000011;
printf("n is: %d\n", n);
x is: 9
十进制不应该是3吗?
00000011
是9
的八进制值,不能直接用二进制表示。
Octal 011 -> Decimal 9
只能指定十进制、八进制和十六进制表示,对于十进制表示,它很简单,对于八进制表示,您在值前加上 0
前缀,因此 09
无效,对于十六进制表示,您在值前加上 0x
.
注意:正如 abligh 所评论的,您可以将 0b
前缀与 gcc
和 clang
可能还有其他编译器。
在 c 中,以 0*digit* 开头的数字文字是 base-8。 对于二进制文件,一些编译器允许您以 0b 开头。 否则你必须手动将它们转换为十六进制或八进制。
#include <stdio.h>
int main(void){
int n=0b00000011;
printf ("n is %d\n",n);
return 0;
};