C:使用8位char作为完整的int

nav*_*ige 0 c bit-manipulation bit

我正在尝试将char的8位转换为int的最低位.我知道从转换charint很容易通过

int var = (int) var2;
Run Code Online (Sandbox Code Playgroud)

其中var2是类型char(甚至没有put (int)).

但是我想知道,如果我编写上面的代码,那么int只是随机的剩余最高有效(32-8 =)24位还是设置为0?

例如:我们var2可以00001001,如果我写上面的代码,是var那么00000000 00000000 00000000 00001001

md5*_*md5 5

C11(n1570),§6.5.4演员

通过带括号的类型名称在表达式之前将表达式的值转换为命名类型.

因此,剩余的var设置为0.

顺便说一下,显性演员是不必要的.从转换charint隐式的.

C11(n1570),第6.3.1.1节布尔,字符和整数

如果a int可以表示原始类型的所有值(由宽度限制,对于位字段),则该值将转换为int; 否则,它被转换为unsigned int.这些被称为整数促销.

  • @navititious:您的示例导致*未定义的行为*,因为它打破了*严格别名规则*.具有`char`类型的对象应使用具有`((un)signed)char`类型的左值访问.在这种情况下,不允许使用`int`. (3认同)
  • 这个答案是不完整的,因为它没有考虑`char`类型的签名(它的实现定义),并忽略使用了哪个签名表示(也是实现定义) (2认同)