Я использую язык Си. Тип 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
Интересно, почему это произошло. Спасибо.