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 右移 ...
随机推荐
- centos7 内网可达,外网不可达
参考:https://www.cnblogs.com/operationhome/p/10207257.html 网关地址改为192.168.1.1
- JMETER - BEANSHELL获取响应结果
获取响应结果 添加后置处理器 //获取获取请求的返回值 String response = prev.getResponseDataAsString(); //日志打印获取请求的返回值 log ...
- 解决 INSTALL FAILED CONFLICTING PROVIDER
1.现象: 2.产生原因 INSTALL FAILED CONFLICTING PROVIDER 产生的原因通常是因为系统中已经安装的apk的provider中的authorities相同了,导致在安 ...
- python3-filter
Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是 ...
- [python 学习] argparse模块
https://docs.python.org/3/library/argparse.html#module-argparse
- layui树形表格支持非异步和异步加载
layui树形表格支持非异步和异步加载. 仓库地址:https://gitee.com/uniqid/ 使用示例如下: <div class="uui-admin-common-bod ...
- Linux学习-DNS服务相关
一.DNS服务简介 1.基本概念 (1) DNS( Domain Name System )域名系统,是一种组织成域层次结构的计算机和网络服务命名系统,是一个应用层协议,使用TCP与UDP的53端口, ...
- php中魔术方法有什么用
在面向对象编程中,PHP提供了一系列的魔术方法,这些魔术方法为编程提供了很多便利.PHP中的魔术方法通常以__(两个下划线)开始,并且不需要显示的调用而是由某种特定的条件出发. __construct ...
- [CSP-S模拟测试]:柱状图(树状数组+二分+三分)
题目描述 $WTH$获得了一个柱状图,这个柱状图一共有$N$个柱子,最开始第$i$根柱子的高度为$x_i$,他现在要将这个柱状图排成一个屋顶的形状,屋顶的定义如下:$1.$屋顶存在一个最高的柱子,假设 ...
- P2239螺旋矩阵
传送 看到这数据范围,显然咱不能暴力直接模拟(二维数组开不下,而且会T掉) 我们目前有两种选择: 1.优化暴力 走这边(jyy tql%%%) 2.数学做法 我们看一下题目中的那个矩阵 我们能不能找 ...