0

The problem is to tell if two 8-bit chars are gray codes(differ only in 1 bit) in C++? I found an elegant C++ solution:

bool isGray(char a, char b) {
    int m = a ^ b;
    return m != 0 && (m & (m - 1) & 0xff) == 0;
}

I was confused that what does the "& 0xff" do?

4

2 回答 2

0

& 0xff从结果值中提取 8 个最低位,忽略任何更高的位。

于 2015-03-18T04:54:10.853 回答
0

这是错的。错误的想法是char8位。

这也是没有意义的。假定的问题是它m可能具有比char(true) 更多的位,因此“不必要的”位被屏蔽掉。

但是m是符号扩展的。这意味着符号位被复制到更高位。现在,当我们进行比较时,x==0我们正在检查是否所有位都为零,并且x & 0xff我们正在比较低 8 位是否为零。如果 x 的第 8 位被复制到所有更高的位置(通过符号扩展),那么无论复制的位是 0 还是 1,这两个条件都是相同的。

于 2015-03-18T08:30:23.730 回答