我正在尝试将 char 的 8 位转换为 int 的最低有效位
Achar
不保证为 8 位。可能更多。此外,正如其他人所提到的,它可能是有符号整数类型。在下面的代码中,负值char
将转换为负值。int
int var = (int) var2;
符号位被认为是最重要的,所以这段代码没有做你想做的事。也许您的意思是转换 from char
to unsigned char
(使其成为正数),然后 to int
(通过隐式转换):
int var = (unsigned char) var2;
如果您预计CHAR_BIT
在您的用例场景中超过 8,您可能需要考虑使用模运算符来减少它:
int var = (unsigned char) var2 % 256;
但我想知道,如果我编写上面的代码,int 的剩余最高有效位(32-8=)24 位是随机的还是设置为 0?
当然,赋值将分配整个值,而不仅仅是它的一部分。
示例:设 var2 为 00001001,如果我写上面的代码,那么 var 是否为 00000000 00000000 00000000 00001001?
从语义上讲,是的。C 标准要求int
能够存储介于 -32767 和 32767 之间的值。您的实现可以选择表示更大的范围,但这不是必需的。从技术上讲,an至少为 16int
位。要时刻铭记在心。
但是,对于var2
负值(例如10000001
二进制表示法),符号位将被扩展。var
最终将是10000000 00000001
(以二进制表示)。