#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
. Смещение этого права является поведением, определяемым реализацией.