C-为什么char c = 129将转换为-127?

COD*_*ror 1 c variables char

如果我们分配+128给char变量,那么它将被转换为-128二进制等效(10000000-first bit tells sign).二进制当量12910000001,它将被转换为什么值?

char c = 129;

谢谢,S

Kei*_*son 6

实际上有几种可能性.

如果char是签名类型,那么

char c = 129;
Run Code Online (Sandbox Code Playgroud)

隐式将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对象来实现它,都很可能有更好,更清晰,更便携的方式来实现它.