第一 - 有什么区别
#define s 0xFF
Run Code Online (Sandbox Code Playgroud)
和
#define s '\xFF'
Run Code Online (Sandbox Code Playgroud)
第二 - 为什么第二行等于-1?3 - 为什么在我尝试之后(在'\ xFF'的情况下)
unsigned char t = s;
putchar(t);
unsigned int p = s;
printf("\n%d\n", p);
Run Code Online (Sandbox Code Playgroud)
输出是
(blank)
-1
Run Code Online (Sandbox Code Playgroud)
?
谢谢:)
这个
#define s 0xFF
Run Code Online (Sandbox Code Playgroud)
是十六进制整数常量的定义.它有类型int,十进制表示法的值为255.
这个
#define s '\xFF'
Run Code Online (Sandbox Code Playgroud)
是由十六进制转义序列表示的整数字符常量的定义.它也有类型,int但它代表一个角色.其价值计算方式不同.
根据C标准(第6.4.4.4节字符常量的第10页)
...如果整数字符常量包含单个字符或转义序列,则其值是当char类型的对象的值为单个字符或转义序列的对象转换为int类型时产生的值.
似乎默认情况下,您的编译器将char类型的值视为signed char类型的值.因此,根据引号整数字符常量'\ xFF'具有负值,因为符号位(MSB)已设置且等于-1.
如果设置编译器的选项来控制char类型是否被认为是unsigned char的有符号或无符号,那么'\ xFF'和0xFF将具有相同的值255.
考虑到十六进制转义序列可以在字符串文字中与任何其他转义序列一起使用.