📄 shifttest.java
字号:
package Operator;
/**
* Title: ShiftTest类<br>
* Description: 演示位运算<br>
* Copyright:(c)2008 www.luzhou.net<br>
* Company: 泸州职业技术学院电信系
* @author 华卫
* @version 1.00
*/
public class ShiftTest{
public static void main(String [] args){
int x=0x80000000;
int y=0x80000000;
x=x>>1;
y=y>>>1;
System.out.println("0x80000000>>1 = " + Integer.toHexString(x));
System.out.println("0x80000000>>>1 = " + Integer.toHexString(y));
int i=20;
System.out.println(Integer.toBinaryString(i)+"<<2="+Integer.toBinaryString(i<<2));
System.out.println(Integer.toBinaryString(i)+">>2="+Integer.toBinaryString(i>>2));
System.out.println(Integer.toBinaryString(i)+">>>2="+Integer.toBinaryString(i>>>2));
}
}
/*
移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。
左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。
“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。
“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。
Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。
这一运算符是C或C++没有的。
若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。
只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。
若对一个long值进行处理,最后得到的结果也是long。此时只会用到右侧的6个低位,
防止移动超过long值里现成的位数。但在进行“无符号”右移位时,也可能遇到一个问题。
若对byte或short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。
它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情况下会得到-1的结果。
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -