转自 http://blog.csdn.net/todd911/article/details/8851475
书中有如下描述:
\ddd ddd表示1~3个八进制数字,这个转义符表示的字符就是给定的八进制值所代表的字符
\xddd 与上例类似,只是八进制数换成了16进制数。
注意,任何十六进制数都有可能包含在\xddd序列中,但如果结果值的大小超过了表示的字符范围,其结果就是未定义。
问题:
为什么直说了\xddd呢,那\ddd,如果超过了表示字符的范围,会怎样呢。
于是做了如下测试:
[cpp] view plaincopy
- #include <stdio.h>
- int main(void){
- printf("\x123456\n");
- return 0;
- }
编译后报如下错误:
printf.c: In function ‘main‘:
printf.c:4:9: warning: hex escape sequence out of range [enabled by default]
运行后输出:
V
猜测计算机将\x1234看成了整体,因为超出了255,而无法显示,16进制的56在ascii中正好是V。
再进行如下测试:
[cpp] view plaincopy
- #include <stdio.h>
- int main(void){
- printf("\123456\n");
- return 0;
- }
编译无error
运行后结果为:
S456
其中8进制123在ascii中正好是S,456不进行翻译。
可见计算机对8进制和16进制的转义符处理时不一样的。
时间: 2024-11-02 17:25:09