Java 位运算符:左移 << 右移 >> 无符号右移 >>>

来源:互联网 发布:基于java的毕业论文 编辑:程序博客网 时间:2024/05/17 09:18

概述

上一篇文章我们说到了Java运算符的优先级的问题,也给大家提供了一个简单易记的口诀,那么这一篇博文,我们就来看一看Java运算符中的位运算符:左移,右移,无符号右移。程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。

package test;public class Test24 {    public static void main(String[] args){        System.out.println(Integer.toBinaryString(-7));//将整型-7转化为二进制形式显示        System.out.println(7>>2);//将整型7右移2位        System.out.println(7>>>2);//将整型7无符号右移2位        System.out.println(-7>>2);//将整型-7右移两位        System.out.println(-7>>>2);//将整型-7无符号右移两位        System.out.println(7<<2);//将整型7左移移两位        System.out.println(-7<<2);//将整型-7左移移两位    }}

结果为:

1111111111111111111111111111100111-2107374182228-28

解析:

7右移2位

00000000 00000000 00000000 00000111//7的二进制(不要告诉我你不知道为什么)右移两位后00000000 00000000 00000000 00000001//最左边用符号位填充转换十进制为:1

7无符号右移2位

00000000 00000000 00000000 00000111//7的二进制(不要告诉我你不知道为什么)右移两位后00000000 00000000 00000000 00000001//最左边用0填充转换十进制为:1

-7右移2位

11111111111111111111111111111001//-7的二进制右移两位后11111111111111111111111111111110//最左边用符号位填充转换十进制为:-2

-7无符号右移2位

11111111111111111111111111111001//-7的二进制右移两位后00111111111111111111111111111110//最左边用0填充转换十进制为:1073741822

7左移2位

00000000 00000000 00000000 00000111//7的二进制(不要告诉我你不知道为什么)右移两位后00000000 00000000 00000000 00011100//最右边用0填充转换十进制为:28

-7左移2位

11111111111111111111111111111001//-7的二进制右移两位后11111111111111111111111111100100//最左边用0填充转换十进制为:-28

总结:

右移时,位最左边用符号位填充(0为正,1为负),即负数用1填充,正数用0填充;无符号右移时,不管正负数都是用0填充;左移是最右边都是用0填充,不管正负数。

番外:

对二进制标示模糊的同学可以去了解一下原码,反码,补码基础知识。这样对你对以上二进制的表示理解有一定的帮助。当然,如果知道的话,代表同学你看到了最后,不妨污一下你的小手,在文章的左边给博主点个喜欢吧。

阅读全文
2 0
原创粉丝点击