我的头开始疼了...我已经这样看太久了。
我试图屏蔽 int 的最重要的半字节,无论 int 位长度和机器的字节序如何。比方说x = 8425
=0010 0000 1110 1001
=0x20E9
。我知道要获得最低有效半字节,9
,我只需要做类似 x & 0xF
的事情返回9
。但是最重要的半字节怎么样,2
?
如果我的逻辑从这里开始崩溃,我很抱歉,我的大脑完全崩溃了,但我开始了:
我的书告诉我,数据类型 int 的位长度 w 可以用 w = sizeof(int)<<3
来计算。如果我知道机器是大端字节序,我可以做 0xF << w-4
有1111
对于最重要的半字节和 0000
其余的,即 1111 0000 0000 0000
。如果我知道机器是小端字节序,我可以做 0xF >> w-8
有0000 0000 0000 1111
。幸运的是,即使我们被告知假设右移是通过算术完成的,这仍然有效,因为 0xF
总是给我开头的 0000
。但这不是一个正确的解决方案。我们不允许测试字节顺序,然后从那里继续,所以我该怎么办?
最佳答案
位移运算符在高于字节顺序的抽象级别上运行。 “左”移始终向最高有效位移动,“右”移始终向最低有效位移动。
关于c - 获取最高有效半字节,无论 int 位长度和字节顺序如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22890493/