java 位移运算符
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 位移运算符的更多相关文章
- java位移运算符3 转
https://www.cnblogs.com/winsker/p/6728672.html 移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数. 理解java移位运算符 运算 ...
- java位移运算符 转
https://blog.csdn.net/qq_36134429/article/details/78286416#commentsedit java移位运算符不外乎就这三种:<<(左移 ...
- java位移运算符2 转
https://blog.csdn.net/xxx134617/article/details/7454774 java中int类型占4个字节,二进制用补码表示: 3的二进制表示: 00000000 ...
- java位移运算符|And&,操作二进制
在java中 逻辑运算符有四种:& , |, &&, || &: 如果第一个条件是fasle,还会判断第二个条件,只要有一个条件不满足,结果就返回false; ...
- Java位运算符、位移运算符;原码、反码、补码
文章背景:雪花算法 id 生成长度问题. Java位运算符 - 异或运算符(^)<p>运算规则:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1.</p> - ...
- Java补码表和位移运算符
在java中数据都是以二进制的形式保存的. 但是我们看到的数据怎么是10进制的? 因为java展示之前会自动调用toString()方法 这里以4位2进制为例,4位2进制只能表示16个数,即0-15. ...
- Java学习路线:Java中的位移运算符介绍
学习java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,学到java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累. 今天给大家分享的技术知识是:ja ...
- Java 中位移运算符 >>,>>>,<<
Java 中的三种位移运算符 java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : ...
- & 和 && 的区别,与(&)运算符、位移运算符(<< 、>>、>>>)的含义及使用(Java示例)
& 和 && 的区别,与(&)运算符.位移运算符(<< .>>.>>>)的含义及使用(Java示例) 1. & 和 & ...
随机推荐
- yii2场景的应用(scenarios)
例如: 现在在 post表里面有 title image content 三个的字段,当我创建一个 post 的时候,我想三个字段全部是必填项,但是你修改的时候,title content 两个字段是 ...
- elastic-job详解(三):Job的手动触发功能
elastic-job的任务都是使用quartz来触发的,quartz表达式一般都是定期执行.但有时候一些周期较长的任务,比如一天一次,几小时一次的任务,我们需要等待很久才能触发一次.如果我们需要测试 ...
- C#_02.13_基础三_.NET类基础
C#_02.13_基础三_.NET类基础 一.类概述: 类是一个能存储数据和功能并执行代码的数据结构,包含数据成员和函数成员.(有什么和能够干什么) 运行中的程序是一组相互作用的对象的集合. 二.为类 ...
- django之模型层(model)--建表、查询、删除基础
要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...
- springboot拦截器@Autowired为null解决
问题原因 拦截器加载的时间点在springcontext之前,所以在拦截器中注入自然为null 文件解决 在spring配置文件中这样写 @Bean public HandlerInterceptor ...
- win7&win10 右键添加 cmd
修改注册表,位置有 3 个,重复即可: 桌面右键: HKEY_CLASSES_ROOT\Directory\Background\shell 文件夹右键:HKEY_CLASSES_ROOT\Direc ...
- RobotFrameWork环境搭建(基于HTTP协议的接口自动化)
1. 前言 接着上一篇<RobotFramework框架系统课程介绍>,本篇主要介绍一下在基于RobotFramework框架开展接口自动化前,前期的环境如何搭建,正所谓”工欲善其事,必先 ...
- tensorflow 在加载大型的embedding模型参数时,会遇到cannot be larger than 2GB
这种问题是,对于每一个变量 variable 由于是基于protobuf存在这大小限制(2G),这个时候,我们需要将embedding拆开,拆分成N等分,来使得每一个 variable都在2G以下; ...
- golang 小例子
import ( "bytes" "encoding/binary" "encoding/gob" "fmt" ) fu ...
- 开源自己写的Library到github,让别人或自己的项目依赖
对于不会git命令的自己,要上传项目或libary,看了本文,傻瓜式操作,绝壁简单! 新建一个空白工程 File-->New-->New module-->Android Libra ...