Почему операция ~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. Вот примерное представление в виде списка:

  1. ~0 - побитовое исключающее OR над 0 и -1, результат -1
  2. ~0u - побитовое исключающее OR над 0 и -1, результат -1
  3. ~0u >> 1 - сдвиг вправо на 1 позицию, результат -1 Таким образом, в данном коде операция ~0>>1 возвращает значение -1.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.455 из 5
Похожие ответы