Софтуерно Инженерство
Loading...
IvanKrastev avatar IvanKrastev 0 Точки

Странно поведение на побитов оператор- >>

Здравейте, моля за малко помощ при разбирането на побитовите оператори. Използвам проста задача, в която съм настроил всички битове на 64 битово положително число на "1". Зададеното число се опитвам да го "преместя" с 64 позиции на дясно, като очаквам резултатът да е 0, но получавам същият резултат. Променях броя на позиициите на преместване произволно, но резултатът е все същият. Това е линк към простият пример, който използвам, за да си обясня работата на побитовите оператори: https://pastebin.com/H45XuS0r.

Благодаря на всички за оказаната помощ.

 

borkins avatar borkins 47 Точки

Здравей колега!
Не получаваш 0, защото не може да преместваш числото повече от 31 пъти за int и 63 за long.
Ако числото А е 32 битово и B > 31, то от B се ползват само първите 5 бита за операцията.
Ако числото А е 64 битово и B > 63, то от B се ползват само първите 6 бита за операцията.
Например:
int A = 2147483647, B = 32;
A е 32 битово число, B (bin: 0010 0000) > 31, then B (bin: 0 0000) = 0.
Тогава: A >> B = 2147483647 >> 0 = 2147483647.

long A = 9223372036854775807, B = 65;
A e 64 битово число, B (bin: 0100 0001) > 63, then B (bin: 00 0001) = 1.
Тогава A >> B = 9223372036854775807 >> 65 = 4611686018427387903;

0