位运算符和“字节顺序”
-
22-07-2019 - |
解决方案
仅字节序事项在存储器中的数据布局。一旦数据由处理器加载到被操作,字节序是完全无关紧要。移,按位运算等执行你所期望的(在逻辑上布置为低位比特以高的数据)的字节序无关。
其他提示
位运算符抽象掉的字节序。例如,操作者>>
总是移位朝向至少显著位的位。然而,在一个更大的结构,各个字节处理,你不能总是认为他们会落在同一个地方,当使用它们时,例如这并不意味着你是安全的,完全忽略字节序。
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抽象的字节顺序客场位运算。所以,不,不要紧的位运算。
不隶属于 StackOverflow