gpt4 book ai didi

c - 使用字节重新排序的位移位方法时,按位与 255 的意义何在?

转载 作者:太空宇宙 更新时间:2023-11-04 01:57:25 27 4
gpt4 key购买 nike

an article ,解释小/大端主题,并包含一个字节序转换函数的例子:

short reverseShort (short s) {
unsigned char c1, c2;

if (is_bigendian()) {
return s;
} else {
c1 = s & 255;
c2 = (s >> 8) & 255;

return (c1 << 8) + c2;
}
}

我明白了,为什么他们会在这里:

c1 = s & 255;

255 = 11111111,所以按位和 s 可能类似于 1011011010010010,不会影响数字在最后 8 个位置,但将所有前导位置变为零。所以它削减位到结尾 8。

我也明白,为什么他们在这里使用右移:

c2 = (s >> 8) & 255;

移位 8 会删除最后 8 位,因此保留前 8 位。所以在第一个操作中,他们得到最后 8 位,然后是前 8 位。

但为什么他们再次用 255 对其进行“与”处理?

最佳答案

假设 s = 二进制表示:abcdefghijklmnopqrst

c1 = s & 255; // < mnopqrst first 8 bits
c2 = (s >> 8) & 255; // from abcdefghijklmnopqrst >> 8 = abcdefghijkl & b11111111 = efghijkl

return (c1 << 8) + c2; // < (mnopqrst00000000) + efghijkl = mnopqrstefghijkl

它本质上是取前 8 位和接下来的 8 位,然后反转它们

But why they 'and'-ing it with 255 again?

如果它更长,那就将它截断为 8 位

关于c - 使用字节重新排序的位移位方法时,按位与 255 的意义何在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32277760/

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