pma*_*ais 0 c bit-manipulation
是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;
Run Code Online (Sandbox Code Playgroud)
语法很好(虽然难以阅读),它将被解析为c2 = (i1 << 8) >> 24.
因此,它将左移i18个位置,从而将最左边的8位移离左边缘,然后右移结果24个位置,从而将最右边的16位偏离右边缘.如果这就是你想要的,那么你就是好的.我会使用括号使其更具可读性.
如果您只是将其转换为a char,那么为什么您觉得需要删除高阶位并不明显(尽管可能存在其中int并且char具有相同大小的体系结构.)
此外,正如John Bollinger所指出的那样,最终结果可能大于a中可以容纳的结果char,这在char签名类型的常见情况下没有很好地定义.(即使unsigned int是32位也是如此,因为从技术上讲,您无法为8位有符号字符分配大于127的值.)