Я столкнулся с странной ситуацией при использовании оператора смены в java. Когда я сдвигаю с правой стороны на 16 на 31, это приводит к 0, но при попытке сдвига вправо 16 на 32 он остается 16. Не мог бы кто-нибудь объяснить это, потому что я схожу с ума.Почему в Java смещение вправо 16 на 32 приводит к 16, а не к 0? 16 >> 32 = 16 Почему?
public class RightShiftTest {
public static void main(String args[]) {
int b = 16;
System.out.println("Bit pattern for int " + b + " is " +Integer.toBinaryString(b));
// As expected it is 0
System.out.println("After right-shifting " + b + " for 31 times the value is " + (b>>31) + " and bit pattern is " +Integer.toBinaryString(b>>31));
// But why is it not 0 but 16
System.out.println("After right-shifting " + b + " for 32 times the value is " + (b>>32) + " and bit pattern is " +Integer.toBinaryString(b>>32));
}
}
Output:
Bit pattern for int 16 is 10000
After right-shifting 16 for 31 times the value is 0 and bit pattern is 0
After right-shifting 16 for 32 times the value is 16 and bit pattern is 10000
простой поиск в Google может дать вам ответ. – Vladp
Q: «Почему язык X делает так, как он делает?» A: Потому что спецификация говорит так. – Durandal
Ну, здравый смысл пришел именно так, поэтому я не думаю о проверке спецификации, в которой говорилось: (16 >> 1) 32 раза получал бы тот же результат, что и (16 >> 32) один раз. – abhishek08aug