gpt4 book ai didi

c - 在同一语句中向左和向右按位移位

转载 作者:太空宇宙 更新时间:2023-11-04 05:12:36 24 4
gpt4 key购买 nike

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;

最佳答案

语法很好(虽然难以阅读),它将被解析为 c2 = (i1 << 8) >> 24 .

所以它会左移i1 8 个位置,从而将最左边的 8 位移出左侧边缘,然后将结果右移 24 个位置,从而将最右侧的 16 位移出右侧边缘。如果那是你想要的,那你很好。我会使用括号使其更具可读性。

如果您只是想将其转换为 char , 为什么您觉得需要删除高阶位并不明显(尽管确实可能存在 intchar 大小相同的架构。)

此外,正如 John Bollinger 所指出的,最终结果可能会大于 char 中的容量,在 char 的常见情况下定义不明确是有符号类型。 (即使 unsigned int 是 32 位也是如此,因为从技术上讲,您不能将大于 127 的值分配给 8 位有符号字符。)

关于c - 在同一语句中向左和向右按位移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32832262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com