Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Пример. Пусть a=0х6DB7, тогда при выполнении операции b=a<< 6 происходит следующее:



Пусть a=0х6DB7, тогда при выполнении операции b=a<< 6 происходит следующее:

a= 0110110110110111

теряются сдвигаются и заполняются нулями

Окончательно имеем

b= 0110 1101 1100 0000.

Сдвиг вправо несколько отличается от сдвига влево. Выходящие за разрядную сетку биты, как и ранее, теряются. Однако заполнение освобождающихся слева разрядов может происходить по разному в зависимости от реализации (компилятора) и стандартом языка жестко не определяется.

Гарантируется, что при сдвиге вправо беззнаковых операндов (unsigned) освобождающиеся разряды заполняются нулями.

В случае знакового операнда результат сдвига может зависеть от значения крайнего левого (знакового) бита. Большинство компиляторов заполняют вакантные разряды содержимым знакового разряда (так называемое размножение знака).

Однако некоторые копиляторы могут всегда вносить нули в освобождающиеся разряды, не обращая внимания на знак.

Чтобы обеспечить переносимось программ, нужно избегать применения сдвига вправо для знаковых величин или вначале явно преобразовывать их в беззнаковые, и лишь затем выполнять сдвиг.

Для небольших беззнаковых величин сдвиг влево эквивалентен умножению на 2 в степени, равной числу сдвигаемых позиций, а при сдвиге вправо — соответствующему делению.





Дата публикования: 2014-12-25; Прочитано: 148 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...