java右移位怎么算_Java移位运算符
一 描述
<
>>:右移运算符(算术右移),如果数字为正数时,移位后在前面补0,为负数时,则在前面补1;
>>>:无符号右移运算符(逻辑右移),忽略符号,空位补0即可。
二 Demo分析
/**
* @Program:
* @Description: Java移位运算符Demo
* @Author: heykin
* @Create: 2019-01-05 14:29
* @Since: 1.0
**/
public class Test {
public static void main(String[] args) {
/** 正数演示 **/
System.out.println("-----------------正数演示-----------------");
int num = 7;
System.out.println("原值(十进制):" + num + ";原值(二进制)" + Integer.toBinaryString(num));
int tmp = num >> 1;
System.out.println("右移1位(十进制):" + tmp + ";右移1位(二进制)" + Integer.toBinaryString(tmp));
tmp = num >>> 1;
System.out.println("无符号右移1位(十进制):" + tmp + ";无符号1位(二进制)" + Integer.toBinaryString(tmp));
tmp = num << 1;
System.out.println("左移1位(十进制):" + tmp + ";左移1位(二进制)" + Integer.toBinaryString(tmp));
/** 正数演示 **/
/** 负数演示 **/
System.out.println("-----------------负数演示-----------------");
num = -7;
System.out.println("原值(十进制):" + num + ";原值(二进制)" + Integer.toBinaryString(num));
tmp = num >> 1;
System.out.println("右移1位(十进制):" + tmp + ";右移1位(二进制)" + Integer.toBinaryString(tmp));
tmp = num >>> 1;
System.out.println("无符号右移1位(十进制):" + tmp + ";无符号1位(二进制)" + Integer.toBinaryString(tmp));
tmp = num << 1;
System.out.println("左移1位(十进制):" + tmp + ";左移1位(二进制)" + Integer.toBinaryString(tmp));
/** 负数演示 **/
}
}
复制代码
运行结果:
对输出结果补0对齐一下
正数 7
00000000 00000000 00000000 00000111 原值
00000000 00000000 00000000 00000011 右移1位
00000000 00000000 00000000 00000011 无符号右移1位
00000000 00000000 00000000 00001110 左移1位
负数 -7(负数为正数的补码=正数的反码+1)
11111111 11111111 11111111 11111001 原值
11111111 11111111 11111111 11111100 右移1位
01111111 11111111 11111111 11111100 无符号右移1位
11111111 11111111 11111111 11110010 左移1位
复制代码
可以看出,当要移位的数是正数时,右移和无符号右移的值是一样的,当移位的数是负数时,右移的后的值还是负数,无符号右移后的值则是正数。
另外在网上看到一个快速算出移位运算符结果的方法:
在不大于自身数值类型最大位数的移位时,一个数左移n位,就是将这个数乘以2的n次幂;一个数右移n位,就是将这个数除2的n次幂,然后取整。
比如int32位的(64位也是同样方法):
7 >> 1 = 7/2 取整为3
7<< 1 = 7*2 为14
如果移动位数超过了32位怎么办?把移位数和32取余数得到的数字套用即可:
如9 >> 67
1、先67对32取余,结果是3
2、然后9/8 得到结果为1
java右移位怎么算_Java移位运算符相关推荐
- java右移位_java移位运算符详解
java 移位运算符不外乎就这三种: << (左移). >> (带符 号右移)和 >>> (无符号右移) 1 . 左移运算符 左移运算符 << 使 ...
- java 二进制、位运算、和移位运算符(2013-07-30-bd 写的日志迁移
二进制是逢2进位的进位制,0.1是基本算符, 1字节=8位 比如 int a =1 ;int 占4个字节在计算机里表示为: java中的4个位运算,分别是"按位与&.按位或|.按位异 ...
- java学习(21):移位运算符
//移位运算符 public class test{ public static void main(String[] args){ int num=3; //向左移位 System.out.prin ...
- java平移变换_java移位运算符:(左移)、(带符号右移)和(无符号右移)。...
1. 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数. 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规 ...
- java三元表达式必须返回_java – 三元运算符的右手表达式必须兼容...
您的方法声明返回类型是String.任何return语句都必须生成一个与声明的返回类型兼容的表达式. 但是,在这种情况下,返回类型可以是int,这解释了编译器拒绝它的原因. 这不是特定于三元运算符的, ...
- java 8位随机数字_java随即产生8位数的密码
原文链接 http://blog.csdn.net/herrapfel/article/details/1885016 此处仅作记录使用 在Java中我们可以使用java.util.Random类来产 ...
- java 32位授权码_Java实现OAuth2.0授权码方式
Java实现OAuth2.0授权码方式 前面介绍了OAuth2.0和授权方式,可以参考以下文章: 今天就用Java来验证OAuth2.0授权方式的授权码式,我们Spring Cloud的OAuth来实 ...
- java 两位小数 四舍五入_java里的四舍五入(保留两位小数,返回double类型)
1.最简单的操作,验证之后是准确的四舍五入 double payPercent=123.345; System.out.println((double)Math.round(payPercent*10 ...
- java里包含怎么算_java中怎么判断一个字符串中包含某个字符或字符串
展开全部 /*这是一62616964757a686964616fe58685e5aeb931333363393630个静态函数,不用声明对象就可以用的,如你的类名为Test,在任何情况下都可以调用Te ...
最新文章
- 2020年国际学术会议参考列表
- BIG DATA 大数据时代来临
- OpenCASCADE:拓扑 API之历史支持
- adb remount overlayfs的说明
- 【符号修改-X264系列】之根据静态库强符号修改代码工具
- windows程序设设计(2) SDK贴图
- Hash函数加密算法(一)
- 怎样成为PHP 方向的一个合格的架构师(转)
- linux系统 锐捷_Client for RuiJie(锐捷客户端 for linux) 升级版
- Web系统大规模并发-电商秒杀与抢购
- 什么方法可以显著提高程序员工作效率
- Python图书商城(可运行代码)有说明文档
- 经典电影list(辛辛苦苦整理的)
- JetBrains全系列破解
- MD5算法原理简要介绍并采用C#应用在桌面应用系统的用户登录与注册中
- 体系结构实验(2)—— 不同指令集的对比
- 从 KPI 到 OKR,高阶产品人如何推动业务高速增长
- 简单枚举(ZJM要抵御宇宙射线)
- Python for循环遍历字典(dict)的方法
- 锁模光纤激光器 RP Fiber Power