c - 获取最高有效半字节,无论 int 位长度和字节顺序如何

标签 c bit-manipulation endianness

我的头开始疼了...我已经这样看太久了。

我试图屏蔽 int 的最重要的半字节,无论 int 位长度和机器的字节序如何。比方说x = 8425 =0010 0000 1110 1001 =0x20E9 。我知道要获得最低有效半字节,9 ,我只需要做类似 x & 0xF 的事情返回9 。但是最重​​要的半字节怎么样,2

如果我的逻辑从这里开始崩溃,我很抱歉,我的大脑完全崩溃了,但我开始了:

我的书告诉我,数据类型 int 的位长度 w 可以用 w = sizeof(int)<<3 来计算。如果我知道机器是大端字节序,我可以做 0xF << w-41111对于最重要的半字节和 0000其余的,即 1111 0000 0000 0000 。如果我知道机器是小端字节序,我可以做 0xF >> w-80000 0000 0000 1111 。幸运的是,即使我们被告知假设右移是通过算术完成的,这仍然有效,因为 0xF总是给我开头的 0000 。但这不是一个正确的解决方案。我们不允许测试字节顺序,然后从那里继续,所以我该怎么办?

最佳答案

位移运算符在高于字节顺序的抽象级别上运行。 “左”移始终向最高有效位移动,“右”移始终向最低有效位移动。

关于c - 获取最高有效半字节,无论 int 位长度和字节顺序如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22890493/

相关文章:

c++ - 如何在fork之间共享数组?

c - 这个声明在 x86-64 上有什么问题?

c - NULL 地址位置的值是多少?

c++ - 完美实现按位非(~)运算符(翻转位)

java - 让给定范围的位更有效?

c++ - 将二进制值转换为浮点值的计算器——我做错了什么?

C-如何使变量成为大端。默认情况下?

c - 关于程序中指针的问题。 [C]

language-agnostic - 计算非对称字节

endianness - 如何检查系统是大端还是小端?