Разница между ~(x-1) и ~x+1, когда x=0x80000000

Я использую язык Си. Тип x и n — int.

У меня есть один код строки, как показано ниже

  printf("x=%x,n=%d,first=%x,second=%x\n",x,n,((~(x+0xffffffff))>>n),((~x+1)>>n));

Он показывает значение x,n и два метода сдвига n бит дополнительного числа x. Когда x=0x80000000,~(x+0xffffffff)=0x8000000,~x+1=0x80000000, но при сдвиге этих двух на n бит результаты будут другими.

Между прочим, если я изменил 0xffffffff на ~1+1 (это означает ~(x+(~1+1)), результат будет таким же, как ~x+1

Интересно, почему это произошло. Спасибо.

8
задан shirley 4 June 2012 в 13:52
поделиться