/** * @param args * @throws FileNotFoundException */ public static void main(String[] args) throws FileNotFoundException { int b =1 ; int a = b >>>= 1; System.out.println(a); }可以编译啊,是不是你的jdk 版本太低啊。哈哈
>>> 和 >>>= 有什么区别呢? 刚跑了下,没感觉出区别。
>>> 逻辑右移: 无论正负 左边补0 移几位就补几个0 >> 算术右移: 如果是正数 左边补0 移几位就补几个0; 如果是负数 左边补1 移几位就补几个1所以逻辑右移和算术右移是不一样的但是逻辑左移和算术左移完全一样 都是右边补0 移几位就补几个0 所以java里没有逻辑左移<<<这个运算符 只有算术左移<< public static void main(String[] args) { int a = -1; System.out.println(Integer.toBinaryString(a)); a = a >> 31; System.out.println(Integer.toBinaryString(a)); a = a >>> 31; System.out.println(Integer.toBinaryString(a)); a = a << 1; System.out.println(Integer.toBinaryString(a)); }
比如负数,第一个二进制数是1,
如果用 >> 则带符号,那个最高的1不会变动
而 >>> 则会让那个1 也跟着右移。
>>>= 就是 右移后 将左边的值 赋值给右边。over
/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException
{ int b =1 ;
int a = b >>>= 1;
System.out.println(a);
}可以编译啊,是不是你的jdk 版本太低啊。哈哈
>> 算术右移: 如果是正数 左边补0 移几位就补几个0; 如果是负数 左边补1 移几位就补几个1所以逻辑右移和算术右移是不一样的但是逻辑左移和算术左移完全一样 都是右边补0 移几位就补几个0
所以java里没有逻辑左移<<<这个运算符 只有算术左移<<
public static void main(String[] args) {
int a = -1;
System.out.println(Integer.toBinaryString(a));
a = a >> 31;
System.out.println(Integer.toBinaryString(a));
a = a >>> 31;
System.out.println(Integer.toBinaryString(a));
a = a << 1;
System.out.println(Integer.toBinaryString(a));
}
>>>将用0填充高位。>>用高位填充高位。没有<<<运算符。
>>>将用0填充高位。>>用符号位填充高位。没有 < < <运算符。