java 移位运算
移位运算 :将整数转化为二进制(以补码的形式),按位平移。
<< 左移
>> 右移
>>> 无符号右移
<< 右移:
按位做平移,末位用0补上(正负数都一样)
a << n;
如果 a 是 byte、short、int 类型 那么 a << n 就是 a << (n%32)
int a = 5;
System.out.println(a<<3); //输出 40
System.out.println(a<<35); //输出 40
如果 a 是 long 类型 那么 a << n 就是 a << (n%64)
long a = 5;
System.out.println(a<<3); //输出 40
System.out.println(a<<35); //输出 171798691840
System.out.println(a<<67); //输出 40
注意 :由于这只是按位平移,有可能符号化会改变
int a = 1;
a<<=31;
System.out.println(a); //输出 -2147483648
System.out.println(Integer.toBinaryString(a)); //输出 1000 0000 0000 0000 0000 0000 0000 0000
由于最高位是1所以是一个负数
>> 右移:
按位做平移
如果 a 是 byte、short、int 类型 那么 a >> n 就是 a >> (n%32)
int a = 40;
System.out.println(a>>3); //输出 5
System.out.println(a>>35); //输出 5
如果 a 是 long 类型 那么 a >>n 就是 a >> (n%64)
long a = 40;
System.out.println(a>>3); //输出 5
System.out.println(a>>35); //输出 0
System.out.println(a>>67); //输出 5
注意 : 正数右移,前补位0(正数往右移,最小为0)
System.out.println(40>>31); //输出 0
System.out.println(Integer.toBinaryString(40>>31)); //输出 0
负数右移,前补位1(负数往右移,最大为-1)
System.out.println(-40>>31); //输出 -1
System.out.println(Integer.toBinaryString(-40>>31)); //输出 1111 1111 1111 1111 1111 1111 1111 1111
负数右移,并不仅仅是除以2
System.out.println(-5>>1); //输出 -3
System.out.println(Integer.toBinaryString(-5)); //输出 1111 1111 1111 1111 1111 1111 1111 1011
System.out.println(Integer.toBinaryString(-5>>1)); //输出 1111 1111 1111 1111 1111 1111 1111 1101
>>>无符号右移:
按位做平移,前补位用0(正负数都一样)
如果 a 是 byte、short、int 类型 那么 a >>> n 就是 a >>> (n%32)
int a = 40;
System.out.println(a>>>3); //输出 5
System.out.println(a>>>35); //输出 5
如果 a 是 long 类型 那么 a >>> n 就是 a >>> (n%64)
long a = 40;
System.out.println(a>>>3); //输出 5
System.out.println(a>>>35); //输出 0
System.out.println(a>>>67); //输出 5
版权声明:转载请注明出处:http://www.cnblogs.com/lkcc/
请读者亲自试一试代码,以免文章有误而误解。
谢谢读看!
java 移位运算的更多相关文章
- 【原创】Java移位运算
学习移位运算,首先得知道参与移位运算的类型的位数,那先来复习下Java基础类型的占位数吧. Java基础类型 Java基础类型总结一览表 类型 二进制位数 最大值 最小值 初始化值 表示形式 带符号 ...
- [JAVA]移位运算(左移<<,右移>>和无符号右移>>>)
一.背景知识 整数在内存中是以二进制的形式存在的,而且存的是该整数的补码.最高位代表符号位,正数为0,负数为1 正数的补码是其二进制本身,负数的补码则是 符号位保持1不变,其他位按位取反再加1,+0和 ...
- Java移位运算
java中移位运算符有三种“<<”.“>>”.“>>>”,没有“<<<”运算符. “<<”运算符将二进制位进行左移,低位用0来填 ...
- Java 移位运算、符号位扩展
类型取值范围 short 是1字节,即8位.而且 Java 中只有有符号数,所以最大值 0111,1111=2^7-1. 同时计算机中以补码形式存负数,所以可以多表示一个数,则最小值 1000,000 ...
- java移位运算的用途
参考下面这篇文章 http://blog.csdn.net/gaowen_han/article/details/7163104 http://jinguo.iteye.com/blog/540150 ...
- JAVA:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题(5)
一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...
- Java学习第五篇:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题
一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...
- Java中的位运算符、移位运算
一.位运算 Java中有4个位运算,它们的运算规则如下: (1)按位与 (&) :两位全为1,结果为1,否则为0: (2)按位或 (|) :两位有一个为1,结果为1,否则为0: (3) ...
- java中位运算和移位运算详解
一.位运算 (1)按 位 与 & 如果两个相应的二进制形式的对应的位数都为1,则结果为1,记为同1为1,否则为0.首先我们看一下对正数的运算 分别看一下正数和负数的具体运算步骤 ...
随机推荐
- 关于angularjs的$state.go()与ui-sref传参问题
上次转发过关于angularjs回退的文章,回退用到的还是js的回退功能,直接用history.back();实现功能,当时顺便提了下$state.go()有关路由跳转. 那这回就全面解析下$stat ...
- 运行ORB-SLAM笔记_使用篇(二)
1. 编译完成之后就可以使用了,按照说明我们可以知道,首先开启roscore
- 【Excel】Excel筛选迟点时间的公式
效果是这样: 方法: 在B列第2排,输入=if(HOUR(A2) >=9,"迟点","") 然后就是复制,粘贴整个列就OK了.不想复制也可以按住的右下角那 ...
- 清浮动,防止上下margin重叠(浏览器顶部空白崩溃)
清浮动 父级添加类别! .clearfix{zoom:1;//兼容ie6,7} .clearfix:after{ content:"."; display: "block ...
- ng1 http 读取json数据
在前端开发过程中,有时后端还没开发出接口,需要经常自己构造获取本地mock数据. AngularJS XMLHttpRequest $http 是 AngularJS 中的一个核心服务,用于读取远程服 ...
- linux环境下搭建环境发布web项目
在公司真是学习了一下项目环境在linux下搭建和发布的过程,这是每个程序员都应该掌握的一个技能,将整理下为以后温习用,也乐于和为掌握这些技能的猿分享: 这里主要分为5部分:1.安装jdk,并配置环境变 ...
- aop为系统添加操作日志,注入或配置声明的方式来实现
最近做项目实现操作记录添加日志,由于aop这两种实现方式各有优缺点,所以都实现了一下以后根据具体业务选择. 1实现方式一注入: 1.1首先在xml中开启aop注入,需要引入的包此处省略,可百度自己查找 ...
- 最强DE 战斗力 (nyoj 541)
题解链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=541 几天前百度题解后用数学知识AC的,后来大牛说这是一道动态规划题. 网上的数学解题链接 ...
- nyoj 592 spiral grid(广搜)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=592 解决以下问题后就方便用广搜解: 1.将数字坐标化,10000坐标为(0,0),这样就 ...
- HTML form的一些属性(第一版)
p,li { white-space: pre-wrap } HTML表单属性总结(第一版) 基本格式为:<input type="类型" name="名字[唯一, ...