C 什么';s \xFF和0xFF之间的差异

C 什么';s \xFF和0xFF之间的差异,c,hex,C,Hex,1-两者之间的区别是什么 #define s 0xFF 及 第二行-为什么第二行等于-1? 第三个-为什么在我尝试了这个之后(在'\xFF'的情况下) 输出是 (blank) -1 ? 谢谢:)您可以使用字符串连接将'\xFF'作为最后一个字符,也可以作为中间字符,但对于0xFF,情况并非如此 '\xFF'和0xFF之间的差异类似于'a'和字符代码'a'之间的差异(假设在某些实现中它是0x61),只有差异。\xFF'如果在字符串中使用,将消耗更多的十六进制字符 使用putchar打印字符F

1-两者之间的区别是什么

#define s 0xFF

第二行-为什么第二行等于-1? 第三个-为什么在我尝试了这个之后(在'\xFF'的情况下)

输出是

(blank)
-1
?


谢谢:)

您可以使用字符串连接将
'\xFF'
作为最后一个字符,也可以作为中间字符,但对于
0xFF
,情况并非如此

'\xFF'
0xFF
之间的差异类似于
'a'
和字符代码
'a'
之间的差异(假设在某些实现中它是
0x61
),只有差异
。\xFF'
如果在字符串中使用,将消耗更多的十六进制字符


使用putchar打印字符
FF
时,输出取决于实现。但当您将其打印为整数时,由于varargs的默认升级规则,它可能会在
char
分别作为
有符号字符和
无符号字符的系统上打印
-1
255

#define s 0xFF
是十六进制整数常量的定义。它的类型为
int
,其值为255(十进制)

这个

是由十六进制转义序列表示的整数字符常量的定义。它还有类型
int
,但它表示一个字符。其值的计算方式不同

根据C标准(第6.4.4.4节字符常数第10页)

…如果整型字符常量包含单个字符或 转义序列,其值是当对象具有 类型char,其值为单个字符或转义符的值 序列转换为int类型

似乎在默认情况下,编译器将char类型的值视为signed char类型的值。所以根据引号中的整型字符常量 “\xFF”具有负值,因为符号位(MSB)已设置且等于-1

如果将控制类型char被视为有符号还是无符号的编译器选项设置为无符号char,则“\xFF”和0xFF的值将与255的值相同


考虑到十六进制转义序列可能与任何其他转义序列一起用于字符串文字。

什么是x?它是怎么定义的?我错了。固定的!tnks:)tnks gio!关于2号-让我检查一下,当字符未签名时不应该是255吗?@HansPassant我刚刚删除了我的答案,因为“Vlad from Moscow”提醒我,
“\xFF”是一个整数字符常量,具有int类型。
罪魁祸首是默认
字符
类型的实现定义的签名。尝试改用
uint8\t
,输出将始终如预期的那样。
(blank)
-1
#define s 0xFF
#define s '\xFF'