我在 C++ 中写道:
bool ret_is_syscall = (ret_inst_data & 0x00000000000000FF) == 0x000000000000050f;
但是 clion 说它总是错的,为什么?
我正在尝试检查最后 4 个是否为 0x050f
最佳答案
使用 0xFF
进行屏蔽后,仅留下 8 位可供查看,但 0x50f
占用了 11 位。所以这种比较永远不可能是正确的。
如果您只对最后 4 位位感兴趣,请使用 0x0f
掩码:
bool ret_is_syscall = (ret_inst_data & 0x000000000000000f) == 0x000000000000000f;
否则,您需要至少0x7FF
(11位)的掩码才能与0x50f
进行比较:
bool ret_is_syscall = (ret_inst_data & 0x00000000000007ff) == 0x000000000000050f;
如果您对最后 4 个十六进制数字(16 位)感兴趣,请改用 0xffff
掩码:
bool ret_is_syscall = (ret_inst_data & 0x000000000000ffff) == 0x000000000000050f;
关于c++ - 如何检查 C++ 中的位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68202848/