如何使用按位运算符表示否定,C

Jam*_*sev 1 c bit-manipulation operators

假设你有2个数字:

int x = 1;
int y = 2;
Run Code Online (Sandbox Code Playgroud)

使用按位运算符,我该如何表示x-y

tor*_*rak 5

比较两个数字的位数时A,B有三个可能性.以下假定无符号数.

  1. A == B :所有位都相同
  2. A > B:两个数字之间不同的最重要位是设置A而不是B
  3. A < B:两个数字之间不同的最重要位是设置B而不是A

代码可能如下所示

int getDifType(uint32_t A, uint32_t B)
{
  uint32_t bitMask = 0x8000000;
  // From MSB to LSB
  for (bitMask = 0x80000000; 0 != bitMask; bitMask >>= 1)
  {
    if (A & bitMask != B & bitMask)
      return (A & bitMask) - (B & bitMask);
  }
  // No difference found
  return 0;
}
Run Code Online (Sandbox Code Playgroud)