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. bzoj 1006

    http://www.cnblogs.com/zxfx100/archive/2011/03/23/1993055.html https://wenku.baidu.com/view/07f4be19 ...

  2. AES 加密问题

    C# 里面封装的Aes算法好像跟网上C++的加密算法差很多.在网上找了很多资料才看到一个很早的文章, 用C#实现网上C++的算法. http://msdn.microsoft.com/zh-cn/ma ...

  3. 第三届山西省赛1004 一道大水题(scanf)

    一道大水题 时间限制: C/C++ 2000ms; Java 4000ms 内存限制: 65535KB 通过次数: 44 总提交次数: 1020 问题描述 Dr. Pan作为上兰帝国ACM的总负责人, ...

  4. cto职责

    http://www.sohu.com/a/209574647_505825 https://mp.weixin.qq.com/s?src=3&timestamp=1513066866& ...

  5. 浏览器模式&用户代理字符串(IE)

    问题问题描述今天在做项目的时候,QA部门提了一个Bug,在一个搜索列表中,搜索栏为空时刷新页面,却触发了搜索功能,并且列表显示出<未搜索到结果> 环境IE11 问题原因 QA的IE11用户 ...

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

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

  7. let's encrypt申请

    let's encrypt申请 https://keelii.com/2016/06/12/free-https-cert-lets-encrypt-apply-install/ https://ww ...

  8. php 日期处理 DateTime

    获取所有的时区: print_r(timezone_abbreviations_list ()); 获取毫秒级时间戳 // php7.1+ always has microseconds enable ...

  9. Git-Book

    关于git的文档https://git-scm.com/book/zh/v2

  10. Python import语句导入模块语法[转]

    Python import语句导入模块语法 社区推荐:掘金是国内最活跃的技术社区,我们每日有优质Python开发实例分享,海量python开源库推送.来掘金,和更多懂技术的小伙伴交流.   pytho ...