算术右移 java_Java 中 算术右移和逻辑右移有什么区别?
算术移位:>>,有符号的移位操作,右移之后的空位用符号位补充,如果是
正数用 0 补充,负数用1补充。
例1:
-4>>1
-4的原码
10000000 00000000 00000000 00000100
-4的补码
11111111 11111111 11111111 11111100
0 向右移出 1 位后
11111111 11111111 11111111 11111110
重新取反加一变原码:答案 -2
10000000 00000000 00000000 00000010
逻辑右移:>>>,不管正数、负数,左端都用0补充。
例2:-1>>>1
10000000 00000000 00000000 00000001 -1的原码
11111111 11111111 11111111 11111111 -1的补码
01111111 11111111 11111111 11111111 1 向右移出1位后直接给出答案:2^31-1
例3:6>>>2
00000000 00000000 00000000 00000110 6的原码
00000000 00000000 00000000 00000001 10 向右移出2位后直接给出答案:1
--------------------------------------------------------------------------------------------------------------------------
补充一个例子
byte b = -64;
(b & 0xFF ) >> 4 算术右移4位之后可以拿到高4位的值,原理:
由于移位是以32位为标准的(Why?)
10000000 00000000 00000000 01000000 -64原码
11111111 11111111 11111111 11000000 -64补码
和0xFF相与之后,
00000000 00000000 00000000 11000000 然后算术右移位
00000000 00000000 00000000 0000 1100 12
--------------------------------------------
( b >>> 4 ) & 0x0F 也可以拿到高4位的值 原理:
同上
逻辑右移之后
00001111 11111111 11111111 11111100
跟0x0F相与之后
00000000 00000000 0000000 00001100 也是12
拿低4位更简单了
直接 b & 0x0F 就是了
--------------------------------------------------------------------------------
Long等基本数据类型的装箱类型有个判断符号位正负的方法,现举例如下:
public static int signum(long i)
{
// HD, Section 2-7
return (int) ((i >> 63) | (-i >>> 63));
}
如果long是正数,则左边是0000 0000 0000 0000 0000 0000 0000 0000 .......0000
右边是0000 0000 0000 ....................................................1
则最终结果是+1;
如果long是负数,
则左边是11111111111111111111111..................111111111111
右边是 00000000000000000000000...................000000000000
则最终结果是-1
如果long是0,
左边0的补码是000000000000000000000000000000000000000000000
-0的补码也是 000000000000000000000000......................000000000
所以结果是0
算术右移 java_Java 中 算术右移和逻辑右移有什么区别?相关推荐
- java的算术右移(>>)、算术左移(<<)及逻辑右移(>>>,无符号移位)
特别注意 特别注意:计算机运算是采用补码计算的.最后输出结果是运算结果后补码的原码. 本文所有的操作都是针对存储在计算机中中二进制的操作,正数在计算机中是用二进制表示的,负数在计算机中使用补码表示的. ...
- 算术右移(right arithmetic shift)逻辑右移(right logical shift)算术左移和逻辑左移(left logical shift)
算术右移:数字向右移动,左边补符号位.Windows中支持的函数为:Int64ShraMod32 逻辑右移:数字向右移动,左边补0.Windows中支持的函数为:Int64ShrlMod32 算术左移 ...
- 堆和栈区别 java_Java中的堆和栈以及堆栈的区别
在正式内容开始之前要说明一点,我们经常所说的堆栈堆栈是堆和栈统称,堆是堆,栈是栈,合在一起统称堆栈; 堆主要用来存放对象,栈用来执行程序.dnf自动收货工具的原理就是一个程序比如自动收货,先设置收的东 ...
- Verilog-移位操作(算术右移与逻辑右移)
Verilog-移位操作(算术右移与逻辑右移) 写在前面 MIPS文档中的指令介绍 算术右移与逻辑右移及其Verilog语言区别 算术左移与逻辑左移 写在前面 在计算机组成原理课程设计-Verilog ...
- 左移 右移 逻辑右移 算术右移
左移只有一种: 规则:丢弃最高位,往左移位,右边空出来的位置补0 右移有两种: 1. 逻辑右移:丢弃最低位,向右移位,左边空出来的位置补0 2. 算术右移:丢弃最低位,向右移位,左边空出来的位置补原来 ...
- SystemVerilogVerilog 算术(右左)移和逻辑(右左)移的区别
在编写SystemVerilog&Verilog的过程中,我们在涉及到左移和右移的操作运算时需要注意算术右移和逻辑右移的区别,并且需要对此非常小心,否则容易造成错误!!! 算术右移:要考虑符号 ...
- C语言中的位运算符主要有哪些?逻辑右移与算术右移的区别?
逻辑右移与算术右移的区别? 逻辑右移就是不考虑符号位,右移一位,左边补零即可. 算术右移需要考虑符号位,右移一位,若符号位为1,就在左边补1,:否则,就补0. 所以算术右移也可以进行有符号位的除法,右 ...
- C/C++中的逻辑右移和算术右移
逻辑左移和算术左移,都是在右边补0,效果一样.左移1bit,相当于原数 乘以2. 逻辑右移:右移后,左边补0 算术右移:右移后,左边补符号位,添加的位与原数的符号位相同,正数(0算作正数的一个)补0, ...
- 【Java】位运算符---算术右移和逻辑右移、算术左移和逻辑左移
文章目录 1. 算术左移和逻辑左移 2. 算术右移和逻辑右移 3. Java中<<.>>和>>>的含义 1. 算术左移和逻辑左移 对于有符号数或无符号数:算术 ...
最新文章
- [Unity3d]定义自己的鼠标
- SAP 物料主数据屏幕增强
- Packagist发布个人的Composer包
- Java黑皮书课后题第7章:*7.13(随机数选择器)编写一个方法,返回1到54之间的随机数,但不能是传递到实参中的数。指定如下方法头
- 20165115 第二周学习总结
- arccatalog点要素显示不完_如果你读不完显示屏说明书,至少读完这几句话吧
- 本机获取Intel AMT IP地址的例子
- app中 html5 search 事件,事件 - Cordova中文网
- 每晚有1700万人逛淘宝但什么都不买,马云:我们仍可以靠他们赚钱
- Flash/Flex学习笔记(34):AS3中的自定义事件
- 计算机无法启动printspooler,Win7系统下print spooler服务无法启动的解决方法
- Excel表格中带公式的数值如何复制?
- java计算机毕业设计青岛地区常见昆虫图鉴与论坛源码+数据库+lw文档+系统
- 使用PE镜像修改VMware中Windows镜像的方法
- 【面试分享】GitHub上Star大佬是如何一举拿下7家一线互联网大厂的Offer
- 搬家后计算机总重启,电脑老是开机后不久(几分钟)自动重启,重启一两遍后就可以正常运行...
- MapReduce入门(一)—— MapReduce概述 + WordCount案例实操
- Django項目部署到Ubuntu服務器
- 神经网络中的激活函数介绍
- wireshark数据包过滤
热门文章
- RFID危化品管理系统解决方案
- SAP产品合规管理(Product Compliance)之危险品管理(Dangerous Goods Management)功能讲解
- 怎样用MATLAB画二次函数曲线,matlab画二次函数图像
- HDU 6438Buy and Resell
- c语言对浮点数截断,C语言中浮点数精度进行截断输出
- 李佳琦同款美容仪,让护肤品效果翻倍
- php暴力引流代码,利用霸屏暴力引流,免费分享霸屏代码
- 立个铁矿石的flag,从7月初开始,铁矿石的库存,可能要进入累库存阶段了.
- SAP中国客户名单[转载]
- 中国浓缩咖啡机行业市场供需与战略研究报告