我正在从事按位运算符的作业,我无法在上面做任何事情,而且我想我对持久性很感兴趣。就是说,我使用的是小端机(就像大多数机器一样),但这是否需要考虑?或者这是一个浪费的事实?
万一重要,我正在使用C。
Answers:
字节顺序仅对内存中的数据布局很重要。一旦处理器加载了要操作的数据,字节序就完全无关紧要了。无论字节序如何,移位,按位运算等都可以按您期望的方式执行(逻辑上将数据从低位到高位进行布局)。
按位运算符抽象出字节序。例如,>>
操作员总是将位移向最低有效位。但是,这并不意味着您可以放心地完全忽略字节序,例如,在处理较大结构中的单个字节时,您不能总是假定它们将位于同一位置。
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];
需要澄清的是,我与这里的其他答案基本不同。我想强调的一点是,尽管按位运算符本质上是字节序中性的,但您不能忽略代码中字节序的影响,尤其是与其他运算符结合使用时。