import org.junit.Test;

/**
* 1)<< : 左移运算符
* 2)>> : 右移运算符 (测试正数)
* 3)>> : 右移运算符 (测试负数)
* 4)>>> : 无符号右移 (测试正数)
* 5)>>> : 无符号右移 (测试负数)
*/
public class WeiYiTest { /**
* << : 左移运算符
* 测试数字:101
*/
@Test
public void test1() {
System.out.println(Integer.toBinaryString(101)); // System.out.println(101 << 8); //
System.out.println(Integer.toBinaryString(101 << 8)); // /*
* 左移8位逻辑
* 01100101 // 原数据101
* 01100101 // 向左位移8位,右侧空余的位置用0补全
* <----<---<----<-
* 01100101 00000000 // 位移后得到的数据,25856
*/
System.out.println(Integer.parseInt("0110010100000000", 2)); // 25856 // ==================================================================== // System.out.println(101 << 16); //
System.out.println(Integer.toBinaryString(101 << 16)); // 1100101 00000000 00000000 /*
* 左移16位逻辑
* 01100101 // 原数据101
* 01100101 // 向左位移16位,右侧空余的位置用0补全
* <----<---<----<----<----<
* 01100101 0000000 00000000 // 位移后得到的数据,6619136
*/ System.out.println(Integer.parseInt("011001010000000000000000", 2)); //
} /**
* >> : 右移运算符
* ----------------
* 测试正数:1010001001
*/
@Test
public void test2_1() {
System.out.println(Integer.toBinaryString(1010001001)); // System.out.println(1010001001 >> 8); //
System.out.println(Integer.toBinaryString(1010001001 >> 8)); // /*
* 右移8位逻辑
* 00111100 00110011 01100100 01101001
* 00111100 00110011 01100100 // 向右位移8位,左侧空余的位置用0补全
* ---->--->---->----->---->---->---->
* 00000000 00111100 00110011 01100100 // 位移后得到的数据,3945316
*/ System.out.println(Integer.parseInt("001111000011001101100100", 2)); // 3945316 // ==================================================================== // System.out.println(1010001001 >> 16); //
System.out.println(Integer.toBinaryString(1010001001 >> 16)); // /*
* 右移16位逻辑
* 00111100 00110011 01100100 01101001
* 00111100 00110011 // 向右位移16位,左侧空余的位置用0补全
* ---->--->---->----->---->---->---->
* 00000000 00000000 00111100 00110011 // 位移后得到的数据,15411
*/ System.out.println(Integer.parseInt("0011110000110011", 2)); //
} /**
* >> : 右移运算符
* 测试负数:-1010001001
* --------------------------------
* 位移后,还是负数,符号位没有改变
*/
@Test
public void test2_2() {
System.out.println(Integer.toBinaryString(-1010001001)); // System.out.println(-1010001001 >> 8); // -3945317
System.out.println(Integer.toBinaryString(-1010001001 >> 8)); // /*
* 右移8位逻辑
* 11000011 11001100 10011011 10010111
* 11000011 11001100 10011011 // 向右位移8位,左侧空余的位置用1补全
* ---->--->---->----->---->---->---->
* 11111111 11000011 11001100 10011011 // 位移后得到的数据,-3945317
*/ // ==================================================================== // System.out.println(-1010001001 >> 16); // -15412
System.out.println(Integer.toBinaryString(-1010001001 >> 16)); // /*
* 右移16位逻辑
* 11000011 11001100 10011011 10010111
* 11000011 11001100 // 向右位移16位,左侧空余的位置用1补全
* ---->--->---->----->---->---->---->
* 11111111 11111111 11000011 11001100 // 位移后得到的数据,-15412
*/
} /**
* >>> : 无符号右移
* 测试正数:1010001001
*/
@Test
public void test3_1() {
System.out.println(Integer.toBinaryString(1010001001)); // System.out.println(1010001001 >>> 8); //
System.out.println(Integer.toBinaryString(1010001001 >>> 8)); // /*
* 右移8位逻辑
* 00111100 00110011 01100100 01101001
* 00111100 00110011 01100100 // 向右位移8位,左侧空余的位置用0补全
* ---->--->---->----->---->---->---->
* 00000000 00111100 00110011 01100100 // 位移后得到的数据,3945316
*/ System.out.println(Integer.parseInt("001111000011001101100100", 2)); // 3945316 // ==================================================================== // System.out.println(1010001001 >>> 16); //
System.out.println(Integer.toBinaryString(1010001001 >>> 16)); // /*
* 右移16位逻辑
* 00111100 00110011 01100100 01101001
* 00111100 00110011 // 向右位移16位,左侧空余的位置用0补全
* ---->--->---->----->---->---->---->
* 00000000 00000000 00111100 00110011 // 位移后得到的数据,15411
*/ System.out.println(Integer.parseInt("0011110000110011", 2)); //
} /**
* >>> : 无符号右移
* 测试负数:-1010001001
* -----------------------------
* 位移后,负数变正数了
*/
@Test
public void test3_2() {
System.out.println(Integer.toBinaryString(-1010001001)); // System.out.println(-1010001001 >>> 8); //
System.out.println(Integer.toBinaryString(-1010001001 >>> 8)); // /*
* 右移8位逻辑
* 11000011 11001100 10011011 10010111
* 11000011 11001100 10011011 // 向右位移8位,左侧空余的位置用0补全
* ---->--->---->----->---->---->---->
* 00000000 11000011 11001100 10011011 // 位移后得到的数据,12831899
*/ System.out.println(Integer.parseInt("110000111100110010011011", 2)); // 12831899 // ==================================================================== // System.out.println(-1010001001 >>> 16); //
System.out.println(Integer.toBinaryString(-1010001001 >>> 16)); // /*
* 右移16位逻辑
* 11000011 11001100 10011011 10010111
* 11000011 11001100 // 向右位移16位,左侧空余的位置用0补全
* ---->--->---->----->---->---->---->
* 00000000 00000000 11000011 11001100 // 位移后得到的数据,50124
*/ System.out.println(Integer.parseInt("1100001111001100", 2)); //
} }

java 位移运算符的更多相关文章

  1. java位移运算符3 转

    https://www.cnblogs.com/winsker/p/6728672.html 移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数. 理解java移位运算符 运算 ...

  2. java位移运算符 转

    https://blog.csdn.net/qq_36134429/article/details/78286416#commentsedit java移位运算符不外乎就这三种:<<(左移 ...

  3. java位移运算符2 转

    https://blog.csdn.net/xxx134617/article/details/7454774 java中int类型占4个字节,二进制用补码表示: 3的二进制表示: 00000000 ...

  4. java位移运算符|And&,操作二进制

    在java中 逻辑运算符有四种:&  ,  |,  &&,  || &: 如果第一个条件是fasle,还会判断第二个条件,只要有一个条件不满足,结果就返回false; ...

  5. Java位运算符、位移运算符;原码、反码、补码

    文章背景:雪花算法 id 生成长度问题. Java位运算符 - 异或运算符(^)<p>运算规则:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1.</p> - ...

  6. Java补码表和位移运算符

    在java中数据都是以二进制的形式保存的. 但是我们看到的数据怎么是10进制的? 因为java展示之前会自动调用toString()方法 这里以4位2进制为例,4位2进制只能表示16个数,即0-15. ...

  7. Java学习路线:Java中的位移运算符介绍

    学习java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,学到java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累. 今天给大家分享的技术知识是:ja ...

  8. Java 中位移运算符 >>,>>>,<<

    Java 中的三种位移运算符 java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     ...

  9. & 和 && 的区别,与(&)运算符、位移运算符(<< 、>>、>>>)的含义及使用(Java示例)

    & 和 && 的区别,与(&)运算符.位移运算符(<< .>>.>>>)的含义及使用(Java示例) 1. & 和 & ...

随机推荐

  1. 关于django的部分

    新建Django工程 django-admin.exe startproject mysite 新建Django工程 新建static(静态模板文件存储路径) setting中配置static路径 S ...

  2. 常见的git清单

    我们每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 这篇文章是从别人博客上copy重新整理出来的,作为笔记用, ...

  3. 几个例子弄懂JS 的setInterval的运行方式

    这篇文章主要介绍了js的setInterval方法的用法以及示例,非常的有用,这里推荐给小伙伴们. setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口 ...

  4. leetcode笔记--水箱问题

    类型的引用:Solution *s=new Solution(); 1.Container With Most Water Given n non-negative integers a1, a2, ...

  5. Android SDK版本号 与 API Level 对应关系

    转自:https://blog.csdn.net/qiaoquan3/article/details/70185550 Android SDK版本号 与 API Level 对应关系   新接触And ...

  6. 修复恢复"可疑"的SQLServer数据库

    今天机房突然断电,DB连不上了,提示 无法打开数据库'MyDB'.恢复操作已将该数据库标记为 SUSPECT. 原因是断电导致DB文件损坏 通过SQL Server Management Studio ...

  7. Go web编程实例

    1. go web编程入门 记录个web编程例子方便以后使用. 主要有: chan的使用(带缓存,不带缓存) client发起get/post请求 server解析get/post请求参数 http. ...

  8. 【Jenkins】新版本的特性:自定义流水线

    #!/usr/bin/env groovy pipeline { agent none stages { stage('stage-01') { agent { label 'master' } st ...

  9. 基于Cesium的demo赏析

    更新于2019.2.23 Cesium的强大不用多说,所以有很多政府.组织基于cesium做了一些应用,其中不乏有很多优秀的示例,我们大都可以从中获得对自己的项目有益的东西.另:有的网站需要FQ. 官 ...

  10. shell编程学习笔记(五):Shell中脚本的参数

    在执行Shell脚本的时候,可以在执行时带上参数,相当于传递参数给脚本,下面我们看一下怎么使用这个参数 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/script ...