【发布时间】:2020-07-08 14:47:47
【问题描述】:
【问题讨论】:
-
一个足够宽的整数和两个字符的结构的联合可能是你想要的。但这不被认为是干净的。您是否考虑过强制转换为 int、移位和位或运算?
-
注意
C初始化后int C = 'AB';的值为implementation-defined。 -
试试
int C; C= (((int)a)<<8)|((int)b);如果这行得通并且得到你想要的,我会回答并解释。 -
当普通的
char是有符号类型并且变量中的值为负时,转换应该是(unsigned char)A以避免符号扩展问题。 -
@Yunnosch:如果你有
(unsigned char)A << 8作为术语,那么unsigned char的值在移位发生之前被扩展为int,结果是int,值即使普通的char类型是有符号类型并且A中的值是负的char值,A中的 in 也不会被符号扩展。如果将负的(隐式带符号的)char值直接转换为int,那么它将进行符号扩展,结果的高位将全部为 1 位。