java中的移位操作
2012-10-13 21:58
211 查看
java中的移位操作只对int和long有效,byte、short、char升级为int后再进行移位
移位操作符有>>(右移)、<<(左移)、>>>(右移)三种,注意两点:1.没有<<<符号 2.移位是不循环的
三种的区别是
>>是带符号右移,负数高位补1,正数补0
<<左移不管负数还是正数,在低位永远补0
>>>是不带符号右移,不论负数还是正数,高位补0
测试程序:
运行结果:
******************正数左移在低位补0*******************
4
100
******************正数右移在高位补0********************
0
0
******从上面结果可以看出:移位是不循环的*****
看看负数的移位:
***********负数的右移操作高位补1**************
-1:
11111111111111111111111111111111
-1
11111111111111111111111111111111
**********负数的左移操作低位补0*****************
-4
11111111111111111111111111111100
*************再看看>>>操作符*************
*************负数的>>>操作高位补0***************
11111111111111111111111111111111
4194303:
1111111111111111111111
*************注意:没有<<<符号**************
**********byte类型移位时要强转换*************
1010
10
移位操作符有>>(右移)、<<(左移)、>>>(右移)三种,注意两点:1.没有<<<符号 2.移位是不循环的
三种的区别是
>>是带符号右移,负数高位补1,正数补0
<<左移不管负数还是正数,在低位永远补0
>>>是不带符号右移,不论负数还是正数,高位补0
测试程序:
public class Shift { public static void main(String[] args) { System.out.println("******************正数左移在低位补0*******************"); int a = 1; a = a << 2; System.out.println(a); System.out.println(Integer.toBinaryString(a)); System.out.println("******************正数右移在高位补0********************"); a = 1; a = a >> 2; System.out.println(a); System.out.println(Integer.toBinaryString(a)); System.out.println("******从上面结果可以看出:移位是不循环的*****"); System.out.println("看看负数的移位:"); System.out.println("***********负数的右移操作高位补1**************"); int i = -1; System.out.println(i + ":"); System.out.println(Integer.toBinaryString(i)); i = i >> 2; System.out.println(i); System.out.println(Integer.toBinaryString(i)); System.out.println("**********负数的左移操作低位补0*****************"); i = i << 2; System.out.println(i); System.out.println(Integer.toBinaryString(i)); System.out.println("*************再看看>>>操作符*************"); System.out.println("*************负数的>>>操作高位补0***************"); i = -1; System.out.println(Integer.toBinaryString(i)); i = i >>> 10; System.out.println(i + ":"); System.out.println(Integer.toBinaryString(i)); System.out.println("*************注意:没有<<<符号**************"); System.out.println("**********byte类型移位时要强转换*************"); byte k = 10; System.out.println(Integer.toBinaryString(k)); k = (byte) ((byte) k >>> 2); System.out.println(Integer.toBinaryString(k)); } }
运行结果:
******************正数左移在低位补0*******************
4
100
******************正数右移在高位补0********************
0
0
******从上面结果可以看出:移位是不循环的*****
看看负数的移位:
***********负数的右移操作高位补1**************
-1:
11111111111111111111111111111111
-1
11111111111111111111111111111111
**********负数的左移操作低位补0*****************
-4
11111111111111111111111111111100
*************再看看>>>操作符*************
*************负数的>>>操作高位补0***************
11111111111111111111111111111111
4194303:
1111111111111111111111
*************注意:没有<<<符号**************
**********byte类型移位时要强转换*************
1010
10
相关文章推荐
- java中的移位操作
- Java移位操作
- Java 移位操作
- java的移位操作详解,左移和右移
- Java 一一 进制、原码 反码 补码、移位操作
- 25.java语言基础-移位操作
- Java中的移位操作以及基本数据类型转换成字节数组【收集】
- Java的移位操作!!【左移和右移】
- 【递归算法】Java模拟汉诺塔移位、阶乘、斐波那契数列操作
- Java 移位操作>>,<<,>>> 位逻辑运算符 &, |,~,^
- java之移位操作
- Java的移位操作(收集+纠正)
- 用java实现数组的循环逐步移位操作
- Java 移位操作
- Java的移位操作(收集+纠正)
- c、java移位操作
- Java移位操作>>,>>>与<<
- java 移位操作
- Java移位操作
- Java中的移位操作