Имеет ли >> какое-либо значение в C?

#c #conditional-statements

#c #условные операторы

Вопрос:

Я новичок в языке программирования C, недавно я прочитал о логике. Имеет ли выражение like x >> 1 какое-либо значение в C?

 if (x >> 1) {
    printf("%d", x);
}
  

Комментарии:

1. @Akshay помните, что в некоторых частях мира субботний вечер.

2. Вы пробовали использовать >> известное значение, а затем распечатать результат? Что произошло?

Ответ №1:

>> Оператор является оператором сдвига вправо. Он принимает значение с левой стороны и делит каждый бит на количество битов с правой стороны.

Например, если двоичное значение переменной равно 00110 (6), сдвиг вправо на 1 приводит к 00011 (3). Аналогично, сдвиг 01001 (9) вправо на 2 приводит к 00010 (2). Таким образом, для целых чисел без знака оно эффективно делится на степень 2, округленную в меньшую сторону.

Если левый операнд >> является целым числом со знаком и имеет отрицательное значение, результат определяется реализацией (раздел 6.5.7 текущего стандарта C). В большинстве распространенных реализаций для настольных компьютеров, которые используют представление отрицательных чисел с дополнением 2, 1 в этом случае бит будет сдвинут слева, чтобы сохранить знак переменной.

Таким 11111011 образом, значение со знаком (-5), сдвинутое вправо на 1, приводит к 11111101 (-3). Как и в случае с положительными значениями, это эффективно делится на степень 2, округленную в меньшую сторону.

В приведенном примере переменная x сдвинута вправо на 1. Затем значение этого выражения вычисляется в логическом контексте, то есть проверяется, равно ли оно нулю. Если результирующее значение не равно нулю, то printf команда выполняется.

Комментарии:

1. Обратите внимание на пример 11111011 , как будет выглядеть значение со знаком (-5) signed char . Смещение этого права является поведением, определяемым реализацией.