如果我们分配+128给char变量,那么它将被转换为-128二进制等效(10000000-first bit tells sign).二进制当量129是10000001,它将被转换为什么值?
char c = 129;
谢谢,S
实际上有几种可能性.
如果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对象来实现它,都很可能有更好,更清晰,更便携的方式来实现它.