meaning of (number) & (-number)

后端 未结 3 1214
不知归路
不知归路 2020-11-29 09:22

What is the meaning of (number) & (-number)? I have searched it but was unable to find the meaning

I want to use i & (-i) in for l

3条回答
  •  时光说笑
    2020-11-29 09:52

    Assuming that negative values are using two's complement. Then -number can be calculated as (~number)+1, flip the bits and add 1.

    For example if number = 92. Then this is what it would look like in binary:

    number               0000 0000 0000 0000 0000 0000 0101 1100
    ~number              1111 1111 1111 1111 1111 1111 1010 0011
    (~number) + 1        1111 1111 1111 1111 1111 1111 1010 0100
    -number              1111 1111 1111 1111 1111 1111 1010 0100
    (number) & (-number) 0000 0000 0000 0000 0000 0000 0000 0100
    

    You can see from the example above that (number) & (-number) gives you the least bit.

    You can see the code run online on IDE One: http://ideone.com/WzpxSD

    Here is some C code:

    #include 
    #include 
    #include 
    using namespace std;
    
    void printIntBits(int num);
    void printExpression(char *text, int value);
    
    int main() {
      int number = 92;
    
      printExpression("number", number);
      printExpression("~number", ~number);
      printExpression("(~number) + 1", (~number) + 1);
      printExpression("-number", -number);
      printExpression("(number) & (-number)", (number) & (-number));
    
      return 0;
    }
    
    void printExpression(char *text, int value) {
      printf("%-20s", text);
      printIntBits(value);
      printf("\n");
    }
    
    void printIntBits(int num) {
        for(int i = 0; i < 8; i++) {
            int mask = (0xF0000000 >> (i * 4));
            int portion = (num & mask) >> ((7 - i) * 4);
          cout << " " << std::bitset<4>(portion);
        }
    }
    

    Also here is a version in C# .NET: https://dotnetfiddle.net/ai7Eq6

提交回复
热议问题