В памяти целое число со знаком, хранящееся как дополнение 2, если знак int и когда данные читаются из памяти {% d}, они преобразуются в исходную форму, так что здесь дополнение 2 к -1 будет сохранено в памяти, скажем, целое число занимает 2 байта, так что 2's complement of -1 is 1111 1111 1111 1111
После выполнения a>>1
Это изменится 0111 1111 1111 1111
сейчас. Как мы знаем, когда данные считываются из памяти, они снова преобразуются в 0 дополнений, поэтому возьмите 2 дополнения 0111 1111 1111 1111
Это будет похоже на 1000 0000 0000 0001
что равно -1
Примечание: дополнение 2 к числу +ve
такое же, как и к исходному двоичному представлению 2, дополнение только к -ve
числу.В C число всегда сохраняется как форма дополнения до 2