Компьютеры - это бинарные устройства.Из-за этого числа представляются последовательностью из 1 и 0.
Сдвиг в битах просто перемещает эти последовательности из 1 и 0 влево или вправо.
Таким образом, все, что делает оператор >>
, этосдвиньте биты вправо на один бит.
Рассмотрим число 101:
// Assuming signed 8-bit integers
01100101 // How 101 is represented in binary
00110010 // After right shifting one bit, this represents 50
Младший значащий бит в этом случае был усечен.Очевидно, дьявол кроется в деталях, но это все, что есть на самом деле.
Оператор <<
выполняет противоположную операцию:
// Assuming signed 8-bit integers
01100101 // How 101 is represented in binary
11001010 // After left shifting one bit, this represents -54
// Assuming unsigned 8-bit integers
01100101 // How 101 is represented in binary
11001010 // After left shifting one bit, this represents 202
В этом случае самый старший бит былусеченный, так как я использовал только 8 бит.Однако, если у числа было больше битов:
// Assuming signed 16-bit integers
00000000 01100101 // How 101 is represented in binary
00000000 11001010 // After left shifting one bit, this represents 202
00000001 10010100 // After left shifting one bit again, this represents 404
Таким образом, вы можете получить разные числа в зависимости от количества бит и типов данных, связанных с этими битами, с которыми вы имеете дело.
Приложение: Если вам интересно, как работает двоичная система, подумайте о том, как работает десятичная система счисления.Рассмотрим число 5287. Его можно записать так:
5287
Но вы также можете написать его так:
5287 = (5 * 1000) + (2 * 100) + (8 * 10) + (7 * 1)
Который вы затем можете написать так:
5287 = (5 * 10^3) + (2 * 10^2) + (8 * 10^1) + (7 * 10^0)
Приведенное выше уравнение объясняет, почему десятичную систему счисления иногда называют системой с основанием 10.В десятичной системе счисления используется 10 цифр (0-9).Обратите внимание на то, как показатели соответствуют позициям цифр.
Бинарная система счисления или система base-2 - это то же самое, но с номером два в качестве основы показателей и с использованием только двух цифр:0 и 1.
5287 = 00010100 10100111 (base 2)
= (0 * 2^15) + (0 * 2^14) + (0 * 2^13) + (1 * 2^12)
+ (0 * 2^11) + (1 * 2^10) + (0 * 2^9) + (0 * 2^8)
+ (1 * 2^7) + (0 * 2^6) + (1 * 2^5) + (0 * 2^4)
+ (0 * 2^3) + (1 * 2^2) + (1 * 2^1) + (1 * 2^0)