按字节操作,字节顺序是否重要?任一逻辑或移位?
我正在做作业关于位运算符,我不能做出正面或反面就可以了,我想我已经相当挂了字节序.也就是说,我正在使用一个小端机器(像大多数人一样),但是这需要考虑还是浪费的事实?
如果重要,我正在使用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];
澄清一下,我对这里的其他答案并没有基本的不同意见.我想要强调的是,尽管按位运算符基本上是字节序中性的,但你不能忽略代码中endianess的影响,特别是当与其他运算符结合使用时.
正如其他人提到的那样,移位是由C语言规范定义的,并且与字节序无关,但是右移的实现可能会有所不同,具体取决于体系结构是使用一个补码还是两个补码算术。