Java负整数的左移、右移、无符号右移
Java负整数的左移、右移、无符号右移。正数的位移没有涉及到符号,而且正数的原码、反码、补码都是一样的,所以相对简单,但是对于负整数的位移,往往容易混淆。
Java的<< >> >>> 都是针对补码来进行的,因为Java只存储补码。
例如对整数-3进行<< >> >>>运算做说明。
整数-3的二进制
原码为 10000000 00000000 00000000 00000011
反码为 11111111 11111111 11111111 11111100
补码为 11111111 11111111 11111111 11111101
Java存储的整数-3即为11111111 11111111 11111111 11111101,
1、
对-3左移3位 -3<<3
<< >> 都是要关照符号位的,所以
11111111 11111111 11111111 11111101 左移3位后为
11111111 11111111 11111111 11101000 ,
原码为:10000000 00000000 00000000 00100111,转为整数即-24
2、
对-3右移3位 -3>>3 ,
就是对-3的补码11111111 11111111 11111111 11111101右移3位,结果为:
1 111 1111111 11111111 11111111 11111,由于是负数,高位需要补1(正数高位补0),而
1 111 1111111 11111111 11111111 11111
的原码为10000000 00000000 00000000 00000001,结果为-1,所以-3>>3的结果整数值为-1
3、
对-3进行无符号右移, -3>>>3,由于>>>是不顾符号的,高位全部补0,
11111111 11111111 11111111 11111101 无符号右移3位为
000 11111111 11111111 11111111 11111
由于无符号右移之后为正数,正数的补码和原码是一致的,所以 -3>>>3的值即为
000 11111111 11111111 11111111 11111
的值,变成整数输出为:0*2^31+0*2^30+0*2^29+1*2^28+1*2^27+.....+1*2^1+1*2^0=536870911
原文地址:https://www.cnblogs.com/sunjie-one/p/8818901.html
Java负整数的左移、右移、无符号右移的更多相关文章
- ABAP语言实现 左移 <<、无符号右移 >>> 位移操作
这几天要在ABAP中实现 3DES 标准对称加密算法,与其他外部系统进行加密/解密操作.由于ABAP语言中没有 左移 <<.无符号右移 >>> 操作,只能自己实现 思路 ...
- 原码,反码,补码 与(&) 或(|) 非(~) 异或(^) 左移 << 右移 >> 无符号右移 >>>
原码 数字在计算机中以二进制表示,8位的字长,最高位是符号位, 正数为0,负数为1.比如,3为0000 0011: -3为1000 0011. 注意,Java中int为32位.3的16进制表示为3,- ...
- java右移>> 无符号右移>>>
>>>是无符号右移,在高位补零 >>是带符号的右移,如果是正数则在高位补零,负数则补1 int a = -1; System.out.println(a>>1 ...
- java的<<左移,>>右移,>>>无符号右移
>>右移 右移,道在二进制中,假设用一个32位的Int表示一个64,那么高位就都是0,所以当我们把整个二进制数右移,如0100000 >> 2 = 0001000,可以看到右移 ...
- java移位运算符:<<(左移)、>>(带符号右移)和>>>(无符号右移)。
1. 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数. 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规 ...
- [JAVA]移位运算(左移<<,右移>>和无符号右移>>>)
一.背景知识 整数在内存中是以二进制的形式存在的,而且存的是该整数的补码.最高位代表符号位,正数为0,负数为1 正数的补码是其二进制本身,负数的补码则是 符号位保持1不变,其他位按位取反再加1,+0和 ...
- java移位运算符实验程序:<<(左移)、>>(带符 号右移)和>>>(无符号右移)
public class txs { static void leftbit(){ int i; //整型长度为32位 ...
- 分析轮子(二)- << ,>>,>> (左移、右移、无符号右移)
前言:写 分析轮子(一)-ArrayList.java 的时候看到源码中有 int newCapacity = oldCapacity + (oldCapacity >> 1); 这样的代 ...
- Java,C 位移运算符 有符号右移>>与无符号右移>>>
个人博客 地址:https://www.wenhaofan.com/a/20181029232749 有符号右移 正数有符号右移 首先计算4>>2 将4转为二进制 0000 0100 右移 ...
随机推荐
- device eth0/1 does not seem to be present, delaying initialization
vmlite虚拟机启动出错,就把这个虚拟机删除掉重新建立,系统虚拟硬盘使用之前的,启动系统后不能上网,通过ifconfig查看网卡没启动,遂启动网卡服务,但是出错,就是:device eth0 doe ...
- Pillow6 起步
使用 Image 类 可以使用 Image 模块的 open() 方法加载图片文件: from PIL import Image im = Image.open("hopper.ppm&qu ...
- man(2) readv writev
#include <sys/uio.h> ssize_t readv(int fd, const struct iovec *iov, int iovcnt); unix高级环境编程中的定 ...
- ps:新建Photoshop图像
从现在起我们开始正式地接触Photoshop,为了保证大家的快捷键设置与教程内容一致.请确认Photoshop的快捷键设置是默认值.可从菜单[编辑 键盘快捷键]打开快捷键设置,在组选项里面选择“Pho ...
- vue2.0 之 directive指令 (自定义)
指令 一.定义: 指令只一种可以附加到DOM元素的微命令(tiny commands). 它们通常以"v-"作为前缀, 以方便Vue知道你在使用一种特殊的标记, 从而确保语法的一致 ...
- 原生jdbc操作
1:加入dbcp连接池依赖 <dependency> <groupId>org.apache.commons</groupId> <artifactId> ...
- mysql数据按条件导出
仅导出部分数据: mysqldump -hlocalhost -uuser -p --skip-triggers --no-create-info dbname tbname -w "id ...
- Conservation Vs Non-conservation Forms of conservation Equations
What does it mean? The reason they are conservative or non-conservative has to do with the splitting ...
- NLP第一周
19-21周,每周学习15小时以上 基础:Python编程基础:基础的概览统计.了解线性代数:足够的时间投入. 完成9个课程项目,每个5小时-15小时 完成聊天机器人项目(40-80小时) Capst ...
- sonar-runner命令模式运行sonar
适用环境:该种配置的模式适用于本地调试模式 前提条件:在工程路径下创建sonar-project.properties文件 该客户端的路径在系统配置文件中进行了定义 alias sonar-runne ...