переход на новую строку: слово повреждения с отделением внутри td

При смещении оставленный, нет никакого различия между арифметическим и логическим сдвигом. При смещении права тип сдвига зависит от типа смещаемого значения.

(Как фон для тех читателей, незнакомых с различием, "логический" сдвиг вправо 1 сдвигом разряда все биты направо и заполняет крайний левый бит с 0. "Арифметический" сдвиг оставляет исходное значение в крайнем левом бите. Различие становится важным при контакте с отрицательными числами.)

При смещении неподписанного значения,>> оператор в C является логическим сдвигом. При смещении значения со знаком>> оператор является арифметическим сдвигом.

, Например, принимая машину на 32 бита:

signed int x1 = 5;
assert((x1 >> 1) == 2);
signed int x2 = -5;
assert((x2 >> 1) == -3);
unsigned int x3 = (unsigned int)-5;
assert((x3 >> 1) == 0x7FFFFFFD);
11
задан shanabus 17 October 2013 в 15:02
поделиться

1 ответ

Adding overflow:hidden to the div should sort it out. Can't offer an explanation though, sorry!

15
ответ дан 3 December 2019 в 08:04
поделиться