如果我们分配+128
给char变量,那么它将被转换为-128
二进制等效(10000000-first bit tells sign
).二进制当量129
是10000001
,它将被转换为什么值?
char c = 129;
谢谢,S
实际上有几种可能性.
如果char
是签名类型,那么
char c = 129;
隐式将int
值转换为char
.结果是实现定义的(或者它可以引发实现定义的信号,但我不知道有任何实现这样做).在大多数实现中,转换产生 - 127
因为带符号类型使用二进制补码表示.在无符号8位类型中,10000001
表示值129
; 在带符号的 8位类型中,相同的位模式表示-127
; 转换不需要保持相同的位模式,但它通常是这样.
如果plain char
是无符号类型(就像在某些系统上那样),则该值129
在范围内char
,并且转换只是产生该值129
.
但所有这些都假设char
是8位.C标准要求CHAR_BIT
(字节中的位数,或等效于char
对象中的位数)至少为 8,但允许它更大.您不太可能遇到系统CHAR_BIT > 8
,但在DSP的 C实现中并不少见.
取决于所有这一点很少是一个好主意.无论你想通过将129分配给一个char
对象来实现它,都很可能有更好,更清晰,更便携的方式来实现它.