Почему операция ~0>>1 возвращает значение -1? - C (СИ)
Формулировка задачи:
ПОчему операция ~0>>1 возвращает значение -1, не зависимо от того, что стоит после ">>"
ведь после ~0 у нас в битовом представлении будут все единицы, а при сдвиге вправо слева должен появиться 0, следовательно знак менятся на положительный и значение будет максимальным Int.
Что не так?
#include <stdio.h> int main(void) { printf ("~0>>1 = %d ",~0>>1); getch(); return 0; }
Решение задачи: «Почему операция ~0>>1 возвращает значение -1?»
textual
Листинг программы
printf ("~0>>1 = %d ",~0u >> 1);
Объяснение кода листинга программы
В данном коде выполняется операция побитового исключающего OR (~) над 0 и результатом этой операции является значение -1. Затем это значение сдвигается вправо на 1 позицию (>>1). Результатом будет также -1. При выполнении побитового исключающего OR над 0 и -1, все биты 0 изменяются на 1, а все биты -1 на 0. Таким образом, получается значение -1. Сдвиг вправо на 1 позицию означает, что все биты значения, кроме последнего, сдвигаются вправо на 1 позицию. В случае с -1, последний бит сдвигается на 0 позиций, так как -1 в двоичном представлении имеет только 1 бит. Таким образом, получается -1. Вот примерное представление в виде списка:
- ~0 - побитовое исключающее OR над 0 и -1, результат -1
- ~0u - побитовое исключающее OR над 0 и -1, результат -1
- ~0u >> 1 - сдвиг вправо на 1 позицию, результат -1 Таким образом, в данном коде операция ~0>>1 возвращает значение -1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д