C程序自动八进制解释
代码1: 代码2:C程序自动八进制解释,c,C,代码1: 代码2: int a = 0987654321; printf("%d",a); 在这里,如果我们输入0987654321,那么它将打印相同的内容,但在第一个代码段中,它给出了一个错误,即八进制常量中的无效值9。使用C编写代码时,可以使用多种表示法- 十六进制(0x123A) 二进制(0b1011)——标准C不支持,但它是像gcc这样的编译器提供的扩展 八进制(01237) 十进制(1234)——可能是最常见的 这里使用的是八进制表示法(因为它以0开头)。这意味着每个数字都以8为
int a = 0987654321;
printf("%d",a);
在这里,如果我们输入0987654321,那么它将打印相同的内容,但在第一个代码段中,它给出了一个错误,即八进制常量中的无效值9。使用C编写代码时,可以使用多种表示法-
- 十六进制
(0x123A)
- 二进制
——标准C不支持,但它是像(0b1011)
这样的编译器提供的扩展gcc
- 八进制
(01237)
- 十进制
——可能是最常见的李>(1234)
0
开头)。这意味着每个数字都以8为基数。因此,0
后面的每个数字只能在[0-7]
范围内<代码>9不是有效的八进制数字,因此编译器正在抱怨
如果您想实际使用十进制表示法,可以将0
删除为-
int a;
scanf("%d",&a);
printf("%d",a);
在第二个示例中,它实际上可以正常工作,因为
scanf
和%d
始终作为十进制表示进行扫描,9
是有效的十进制数字 使用C编写代码时,可以使用多种表示形式-
- 十六进制
(0x123A)
- 二进制
——标准C不支持,但它是像(0b1011)
这样的编译器提供的扩展gcc
- 八进制
(01237)
- 十进制
——可能是最常见的李>(1234)
0
开头)。这意味着每个数字都以8为基数。因此,0
后面的每个数字只能在[0-7]
范围内<代码>9不是有效的八进制数字,因此编译器正在抱怨
如果您想实际使用十进制表示法,可以将0
删除为-
int a;
scanf("%d",&a);
printf("%d",a);
在第二个示例中,它实际上可以正常工作,因为
scanf
和%d
始终作为十进制表示进行扫描,9
是有效的十进制数字 在scanf中,%d
表示读取基数10。使用%i
将前导零视为八进制说明符。不要忘记检查scanf的返回值注意,使用%i
,输入0987654321
将返回0
,将9
保留在输入缓冲区中,供下一次输入操作解释。在scanf中,%d
表示读取基数10。使用%i
将前导零视为八进制说明符。别忘了检查scanfNote的返回值,使用%i
,输入0987654321
将返回0
,将9
保留在输入缓冲区中供下一次输入操作解释。@BLUEPIXY让我检查一下标准,请稍候。尝试gcc test.c-std=c11-pedantic
@BLUEPIXY yes,你确实是。在我的答案中,我会在二进制旁边加一个注释。感谢注意C++ 14向C++语言中添加二进制常量。它还允许您向带有“
字符的数字添加分组:0b0010'0011'1101'1010
是C++14中的有效二进制常量。标点符号使得C++14或更高版本的特别解析比引号被允许之前复杂得多。@JonathanLeffler我永远无法完全理解C++(14+)标准!谢谢你。但是,因为这是关于C++的问题,而且问题被标记为C,所以我不会回答这个问题。@BLUEPIXY让我检查一下标准,请稍等。试试gcc test.C-std=c11-pedantic
@BLUEPIXY是的,你确实是。在我的答案中,我会在二进制旁边加一个注释。感谢注意C++ 14向C++语言中添加二进制常量。它还允许您向带有“
字符的数字添加分组:0b0010'0011'1101'1010
是C++14中的有效二进制常量。标点符号使得C++14或更高版本的特别解析比引号被允许之前复杂得多。@JonathanLeffler我永远无法完全理解C++(14+)标准!谢谢你。但是,因为它是关于C++
的,而且这个问题被标记为C
,所以我将把它排除在答案之外。