高分JAVA位移操作符
<<
>>
>>>
我知道这几个是以二进制来位移的
但是出现带符号的。我有点乱。
有人会的话请帖上对比的二进制格式的。
不知道的请不要盖楼。
讲的好的我加分。
[解决办法]
public class BitOperator { public static void main(String[] args) { System.out.println("\n按位左移"); output("123", 123); output("123 << 2", 123 << 2); System.out.println("\n按位有符号右移"); output("123", 123); output("123 >> 2", 123 >> 2); System.out.println("\n按位有符号右移,右移时高位补充符号位"); output("-123", -123); output("-123 >> 2", -123 >> 2); System.out.println("\n按位无符号右移"); output("123", 123); output("123 >>> 2", 123 >>> 2); System.out.println("\n按位无符号右移,右移时高位补 0"); output("-123", -123); output("-123 >>> 2", -123 >>> 2); } private static void output(String prompt, int result) { System.out.printf("%10s = %-10d %s%n", prompt, result, toBit(result)); } public static String toBit(int num) { char[] chs = new char[39]; for (int i = 0, k = 0; i < Integer.SIZE; i++) { chs[k++] = (char)('0'+ ((num >>> Integer.SIZE - i - 1) & 1)); if ((i & 3) == 3 && k < chs.length) { chs[k++] = ' '; } } return new String(chs); }}按位左移 123 = 123 0000 0000 0000 0000 0000 0000 0111 1011 123 << 2 = 492 0000 0000 0000 0000 0000 0001 1110 1100按位有符号右移 123 = 123 0000 0000 0000 0000 0000 0000 0111 1011 123 >> 2 = 30 0000 0000 0000 0000 0000 0000 0001 1110按位有符号右移,右移时高位补充符号位 -123 = -123 1111 1111 1111 1111 1111 1111 1000 0101 -123 >> 2 = -31 1111 1111 1111 1111 1111 1111 1110 0001按位无符号右移 123 = 123 0000 0000 0000 0000 0000 0000 0111 1011 123 >>> 2 = 30 0000 0000 0000 0000 0000 0000 0001 1110按位无符号右移,右移时高位补 0 -123 = -123 1111 1111 1111 1111 1111 1111 1000 0101-123 >>> 2 = 1073741793 0011 1111 1111 1111 1111 1111 1110 0001
[解决办法]
java用unicode编码,可以放中文,可以放英文。
‘中’是一个字符,在unicode编码占两个字节。
‘a’ 是一个字符,在unicode编码占一个字节。
‘ab’ 是两个字符了,是字符串,不可以。 因为char只能是单字符。