assembly 我如何在汇编中翻转一个数中的n个位?

ws51t4hk  于 2023-03-23  发布在  其他
关注(0)|答案(1)|浏览(120)

如何在汇编中使用异或操作翻转一个数中的“n”个低位/高位?
如何计算掩码?例如,如果n=2,对于“1110”,掩码将是“1100”,对于较高的2,掩码将是“1100”,对于较低的2,掩码将是“0011”,然而对于“111111”,掩码将是“110000”,对于较高的2,掩码将是“110000”。而“000011”表示低两个。那么n=2和这些掩码之间的相关性是什么呢?我怎么能只根据需要翻转的位数而不是根据实际翻转的位数来创建它们呢?(假设我们事先不知道号码)先谢谢你了!
我试着找到我正在使用的数字的位数,我相信已经设法做到了,但仍然找不到相关性。

oknwwptz

oknwwptz1#

我认为,给定数字中的位数,您可以通过使用位移位操作来确定应该使用的掩码。

mask = (1 << n) - 1;
value = value ^ mask;

如果你想翻转最高的n位,你需要做如下的事情

mask = ((1<<(n))-1) << (number of bits - n);
value = value ^ mask;

相关问题