【发布时间】:2015-09-28 21:40:55
【问题描述】:
char c2=i1<<8>>24; 是有效的 C 语法吗? (其中i1 是无符号整数)此外,它会产生将i1 分别向左移动8 位和向右移动24 位的结果吗?我正在解压以前存储在i1 中的一个字符以及其他三个字符。代码如下:
unsigned char b3 = 202;
unsigned char b2 = 254;
unsigned char b1 = 186;
unsigned char b0 = 190;
...
unsigned int i1=202;
i1=i1<<8;
i1=i1+254;
i1=i1<<8;
i1=i1+186;
i1=i1<<8;
i1=i1+190;
...
char c1=i1>>24;
char c2=i1<<8>>24;
【问题讨论】:
-
您的编辑很有用!您实际上可以发布将 4 个
chars 组合成int的代码吗?那里可能潜伏着一个微妙的错误。 -
@chqrlie 按要求修改。
-
约翰·布林格中了靶心!您绝对应该将
c1、c2等声明为unsigned char。您正在处理超过 127 的字节值,您要求使用可能默认签名的char类型来处理它们。 -
他的观点很好!谢谢@John Bollinger
-
即使将
202存储到char中没有任何问题,你仍然不能指望c1 == b3或c1 == 202,因为char可以是signed或@ 987654338@ 取决于编译器设置和平台默认值。
标签: c bit-manipulation