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. yii2 配合bootstrap添加一个气泡

    添加一个气泡 1.bootstrap 官网:http://getbootstrap.com/ 2.bootstrap 中文官网:http://v3.bootcss.com/ 添加气泡主要需要用到 bo ...

  2. Eclipse Maven pom.xml 警告No grammar constraints (DTD or XML schema)

    消除警告方案: <?xml version="1.0" encoding="UTF-8" standalone="no"?> & ...

  3. Disruptor 详解

    想了解一个项目,最好的办法就是,把它的源码搞到本地自己捣鼓. 在网上看了 N 多人对 Disruptor 速度的吹捧,M 多人对它的机制分析,就连 Disruptor 官方文档中,也 NB 哄哄自诩: ...

  4. Mac 10.12下安装python3环境

    python3感觉用虚拟环境会比较好操作一些,也不用直接卸载python2. 一.基于brew快速安装 # 安装python3 brew install python3 # 安装pip(好像3自带pi ...

  5. ASP.NET Core Docker jexus nginx部署-CentOS实践版

    本文用图文的方式记录了我自己搭建centos+asp.net core + docker + jexus + nginx的整个过程,希望对有同样需求的朋友有一定的参考作用. 本文主要内容如下: cen ...

  6. Android定制:修改开机启动画面

    转自:https://blog.csdn.net/godiors_163/article/details/72529210 引言 Android系统在按下开机键之后就会进入启动流程,这个过程本身需要一 ...

  7. UseSwagger

    if [ "$UseSwagger" != "true" ]; then sed -i "s/\"UseSwagger\": tr ...

  8. 关于expect的实战总结

    如何从机器A上ssh到机器B上,然后执行机器B上的命令?如何使之自动化完成?看完下面的文章你就明白了 一.安装 expect 是基于tcl 演变而来的,所以很多语法和tcl 类似 sudo apt-g ...

  9. [转]你可能不知道的五个强大HTML5 API

    一.全屏 // 找到适合浏览器的全屏方法 function launchFullScreen(element) { if(element.requestFullScreen) { element.re ...

  10. cpu使用过高的一次处理方法

    1.top查看使用情况 2.查看mysql里的线程,观察是否有长期运行或阻塞的sql: show full processlist 原因找到,处理方法,添加索引,搞定