\xFF 和 0xFF 有什么区别
What's the diffrence between \xFF and 0xFF
1st - 和
有什么区别
#define s 0xFF
和
#define s '\xFF'
2nd - 为什么第二行等于-1?
第三 - 为什么在我尝试这个之后(在 '\xFF' 的情况下)
unsigned char t = s;
putchar(t);
unsigned int p = s;
printf("\n%d\n", p);
输出是
(blank)
-1
?
谢谢:)
您可以在 string literal 中使用 '\xFF'
作为最后一个字符,也可以使用字符串连接作为中间字符,但对于 0xFF
.
则不然
'\xFF'
和 0xFF
之间的差异类似于 'a'
和字符代码 'a'
之间的差异(我们假设它是 0x61
对于某些实现) 唯一的区别 '\xFF'
如果在字符串中使用,将消耗更多的十六进制字符。
当您使用 putchar 打印字符 FF
时,输出取决于实现。但是,当您将其打印为整数时,由于可变参数的默认提升规则,它可能会在 char
表现为 signed char
和 [=23] 的系统上打印 -1
或 255
=]分别。
这个
#define s 0xFF
是一个十六进制整型常量的定义。它的类型为 int
,其值为十进制的 255。
这个
#define s '\xFF'
是一个整型字符常量的定义,用十六进制转义序列表示。它也有类型 int
但它代表一个字符。它的值计算不同。
根据 C 标准(第 6.4.4.4 节字符常量第 #10 页)
...If an integer character constant contains a single character or
escape sequence, its value is the one that results when an object with
type char whose value is that of the single character or escape
sequence is converted to type int.
您的编译器似乎默认将 char 类型的值视为 signed char 类型的值。所以根据引用整型字符常量
'\xFF' 具有负值,因为符号位 (MSB) 已设置且等于 -1。
如果您将控制类型 char 被视为有符号或无符号的编译器选项设置为 unsigned char,则“\xFF”和 0xFF 将具有相同的值 255。
请注意,十六进制转义序列可以与任何其他转义序列一起用于字符串文字中。
1st - 和
有什么区别#define s 0xFF
和
#define s '\xFF'
2nd - 为什么第二行等于-1? 第三 - 为什么在我尝试这个之后(在 '\xFF' 的情况下)
unsigned char t = s;
putchar(t);
unsigned int p = s;
printf("\n%d\n", p);
输出是
(blank)
-1
?
谢谢:)
您可以在 string literal 中使用 '\xFF'
作为最后一个字符,也可以使用字符串连接作为中间字符,但对于 0xFF
.
'\xFF'
和 0xFF
之间的差异类似于 'a'
和字符代码 'a'
之间的差异(我们假设它是 0x61
对于某些实现) 唯一的区别 '\xFF'
如果在字符串中使用,将消耗更多的十六进制字符。
当您使用 putchar 打印字符 FF
时,输出取决于实现。但是,当您将其打印为整数时,由于可变参数的默认提升规则,它可能会在 char
表现为 signed char
和 [=23] 的系统上打印 -1
或 255
=]分别。
这个
#define s 0xFF
是一个十六进制整型常量的定义。它的类型为 int
,其值为十进制的 255。
这个
#define s '\xFF'
是一个整型字符常量的定义,用十六进制转义序列表示。它也有类型 int
但它代表一个字符。它的值计算不同。
根据 C 标准(第 6.4.4.4 节字符常量第 #10 页)
...If an integer character constant contains a single character or escape sequence, its value is the one that results when an object with type char whose value is that of the single character or escape sequence is converted to type int.
您的编译器似乎默认将 char 类型的值视为 signed char 类型的值。所以根据引用整型字符常量 '\xFF' 具有负值,因为符号位 (MSB) 已设置且等于 -1。
如果您将控制类型 char 被视为有符号或无符号的编译器选项设置为 unsigned char,则“\xFF”和 0xFF 将具有相同的值 255。
请注意,十六进制转义序列可以与任何其他转义序列一起用于字符串文字中。