C - 需要比较int的"n"最低位是否相等

4 c bit-manipulation bit

C - 需要比较nint的最低位是否相等.

即n = 4;

xxxx1001 == xxxx1001(x无所谓)

即n = 2; xxxxxx01 == xxxxxx01

不考虑不使用蒙版的好方法,=).

Guf*_*ffa 25

从位数创建掩码:

int mask = (1 << bits) - 1;
Run Code Online (Sandbox Code Playgroud)

然后你用它来比较值:

if ((a & mask) == (b & mask))
Run Code Online (Sandbox Code Playgroud)

  • @leiz:你的解决方案非常简洁,但可读性有其自身的价值...... (3认同)
  • @leiz:这可能会更快,但今天的CPU并不是线性的,所以如果没有实际分析它你就不会知道.无论哪种方式,它只是微优化,我会选择更具可读性的东西. (2认同)

Dan*_*ull 9

如果你真的不想使用蒙版(不是说它有什么问题!),那么你可以使用shift-left操作符:

if( a << m == b << m )
{
}
Run Code Online (Sandbox Code Playgroud)

其中m是总的位数减去你感兴趣的数字.也就是说,在问题的例子中,m是4(即8-4).

编辑:要清楚 - 我假设问题表明给定使用的格式为8位整数(例如,xxxx1001),但解决方案是通用的,因为它适合任何大小的整数.要确定整数中的位数,请使用8*sizeof(type),其中type可以是int,short,long等.


Nik*_*sMM 0

您可以使用模运算符。例如 n = 4 并且您必须对 x 和 y 进行整型:

if((x%16) == (y%16)){ ....
Run Code Online (Sandbox Code Playgroud)

希望这对您有帮助。

缺口