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 右移 ...
随机推荐
- linux--基础知识3
#linux虚拟终端切换 ctrl+alt+F(1-6) 总共支持六个终端切换 #mkdir /root/boot/目录 在指定路径下新建目录 #touch /目录/文件名 在指定目录创建文件 ...
- highlight语法高亮推荐样式
最近在弄一个类似博客的东西,需要高亮显示代码,所以用了highlight.js来完成 highlight提供了不同的风格我们可以通过更改css样式表来找到适合我们的. 我罗列一部分看看有哪些风格 以下 ...
- spring+mybatis+log4j 输出SQL
1.在mybatis-config.xml配置中添加setting配置参数,会打印SQL执行结果 <?xml version="1.0" encoding="UTF ...
- bzoj1969 [Ahoi2005]LANE 航线规划 树链剖分
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1969 题解 如果我们把整个图边双联通地缩点,那么最终会形成一棵树的样子. 那么在这棵树上,\( ...
- Mac xlwings aem.aemsend.EventError: Command failed: The user has declined permission. (-1743)
aem.aemsend.EventError: Command failed: The user has declined permission. (-1743) 关于mac pycharm 使用xl ...
- python学习笔记(十六)python操作redis数据库
Redis是一个key-value存储系统,它支持丰富的数据类型,如:string.list.set.zset(sorted set).hash. Redis特点 Redis以内存作为数据存储介质,所 ...
- [AGC001E]BBQ Hard 组合数学
题目描述 Snuke is having another barbeque party. This time, he will make one serving of Skewer Meal. He ...
- Spring Security 3.1 中功能强大的加密工具 PasswordEncoder
Spring Security 3.1 中功能强大的加密工具 PasswordEncoder 博客分类: security spring springsecurity 好吧,这种加密机制很复杂,还是 ...
- PB TB级数据
Byte.KB.MB.GB.TB.PB.EB.ZB.YB. 1KB=1000B1MB=1000KB1GB=1000MB1TB=1000GB 1TB=240B=1024MB 1PB=250B k M G ...
- codeforces 380A Sereja and Prefixes (递归)
题目: A. Sereja and Prefixes time limit per test 1 second memory limit per test 256 megabytes input st ...