У меня есть этот оператор:
Примите битовое значение байта
x
00101011. из чего результатx>>2
?
Как я могу программировать его, и кто-то может объяснить меня, что делает?
Когда вы сдвигаете вправо 2 бита, вы отбрасываете 2 наименее значимых бита. Таким образом:
x = 00101011
x >> 2
// now (notice the 2 new 0's on the left of the byte)
x = 00001010
Это по сути то же самое, что делить int на 2, 2 раза.
In Java
byte b = (byte) 16;
b = b >> 2;
// prints 4
System.out.println(b);
>>
- это оператор арифметического сдвига вправо. Все биты в первом операнде сдвинуты на количество разрядов, указанное вторым операндом. Крайним левым битам в результате присваивается то же значение, что и крайним левым битам исходного числа. (Это значит, что отрицательные числа остаются отрицательными.)
Вот ваш конкретный случай:
00101011
001010 <-- Shifted twice to the right (rightmost bits dropped)
00001010 <-- Leftmost bits filled with 0s (to match leftmost bit in original number)
byte x = 51; //00101011
byte y = (byte) (x >> 2); //00001010 aka Base(10) 10
Вы можете использовать, например, этот API, если вы хотите видеть представление ваших чисел bitString. Uncommons Math
Пример (в jruby)
bitString = org.uncommons.maths.binary.BitString.new(java.math.BigInteger.new("12").toString(2))
bitString.setBit(1, true)
bitString.toNumber => 14
редактировать : изменена ссылка api и добавлен небольшой пример
public class Shift {
public static void main(String[] args) {
Byte b = Byte.parseByte("00101011",2);
System.out.println(b);
byte val = b.byteValue();
Byte shifted = new Byte((byte) (val >> 2));
System.out.println(shifted);
// often overloked are the methods of Integer
int i = Integer.parseInt("00101011",2);
System.out.println( Integer.toBinaryString(i));
i >>= 2;
System.out.println( Integer.toBinaryString(i));
}
}
Вывод:
43
10
101011
1010
Вы не можете писать двоичные литералы, такие как 00101011
на Java, поэтому вы можете записать его в шестнадцатеричном формате. :
byte x = 0x2b;
Чтобы вычислить результат x >> 2
, вы можете просто написать именно это и распечатать результат.
System.out.println(x >> 2);