在下面的代码中是分配所需的掩码..
unsigned int x = 0x01020304;
unsigned char a1, a2, a3, a4;
a1 = (x >> 24) & 0xff;
a2 = (x >> 16) & 0xff;
a3 = (x >> 8) & 0xff;
a4 = x & 0xff ;
我确实意识到没有它它也能很好地工作,但我发现所有标准/审查代码中都有这种分配......这不是浪费周期吗??
感谢您对上述代码的回应,似乎编译器忽略(优化)了掩码,如下面的 objdump 所示。
a1 = (x >> 24) & 0xff;
804838b: 8b 45 fc mov 0xfffffffc(%ebp),%eax
804838e: c1 e8 18 shr $0x18,%eax
8048391: 88 45 fb mov %al,0xfffffffb(%ebp)
最佳答案
我喜欢屏蔽代码,因为它清楚地表达了作者的意图,即只保留每个操作的最后 8 位。编译器能够对其进行优化(在字节恰好为 8 位的平台上),而在其他平台上,无论如何都需要屏蔽。
关于c - 在这种情况下是否需要屏蔽?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8162622/