有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/