按位运算符和“字节顺序”

随着按位操作,排序是否有问题? 无论是逻辑还是移位?

我正在做关于按位运算符的作业,我不能在它上面做正面或反面的事情,而且我觉得我已经挂上了永久性。 也就是说,我正在使用一个小端机器(就像大多数机器一样),但这是需要考虑还是浪费的事实?

如果重要,我使用C.


字节顺序只对内存中的数据布局很重要。 只要处理器加载数据以便操作,字节排序完全无关紧要。 位移,位运算等等的性能与您所期望的相同(逻辑上数据逻辑布局为低位至高位),而不管字节顺序如何。


按位运算符抽象出字节序。 例如, >>操作符总是将这些位移向最低有效位。 但是,这并不意味着在使用它们时完全忽略字节顺序是安全的,例如,在处理较大结构中的单个字节时,不能始终假定它们将落入同一位置。

short temp = 0x1234;
temp = temp >> 8;

// on little endian, c will be 0x12, on big endian, it will be 0x0
char c=((char*)&temp)[0];

为了澄清,我并没有与这里的其他答案基本分歧。 我试图强调的是,虽然按位运算符基本上是endian中性的,但是不能忽略代码中的endianess的影响,特别是在与其他运算符结合使用时。


正如其他人所提到的,移位是由C语言规范定义的,并且独立于字节序,但是实现右移可能会根据体系结构使用补码还是二进制补码算法而有所不同。

链接地址: http://www.djcxy.com/p/36387.html

上一篇: Bitwise operators and "endianness"

下一篇: Most common C# bitwise operations on enums