是否字节顺序在所有问题与位操作? 任一逻辑或移位?
我正在做作业关于位运算符,我不能做出正面或反面就可以了,我想我已经相当挂了字节序。 也就是说,我使用的是小端机(最喜欢的是),但做到这一点需要考虑或者是一个浪费的事实呢?
在这重要的情况下,我使用C.
是否字节顺序在所有问题与位操作? 任一逻辑或移位?
我正在做作业关于位运算符,我不能做出正面或反面就可以了,我想我已经相当挂了字节序。 也就是说,我使用的是小端机(最喜欢的是),但做到这一点需要考虑或者是一个浪费的事实呢?
在这重要的情况下,我使用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];
为了澄清,我不是在这里的其他答案基本分歧。 我想指出的一点是要强调的是,虽然位运算符本质上是中性的尾段,你不能与其他运营商合并忽略字节序的效果在你的代码,尤其是。
如其他人提及的,位移由C语言规范定义的并且是独立的字节顺序,但右移位的实施可以取决于当且仅当结构使用一的补码或二进制补码算术变化。
这取决于。 没有铸造的数量到一个新的类型,可以透明地处理的字节序。
但是,如果你的操作涉及一些新的类型转换,然后用你的小心。
例如,如果你想要一些权位和投(明确或不)转移到一个新的类型,字节序的问题!
要测试你的字节顺序,你可以简单地施放int
成char
:
int i = 1;
char *ptr;
...
ptr = (char *) &i; //Cast it here
return (*ptr);
您还没有指定一个语言,但通常情况下,编程语言如C抽象的字节顺序客场位运算。 所以,不,不要紧的位运算。