`

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位,结果为:

111111111 11111111 11111111 11111,由于是负数,高位需要补1(正数高位补0),而

111111111 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

 

 

0
1
分享到:
评论

相关推荐

    C语言中的左移和右移

    但是,我们需要注意,有符号数和无符号数的右移规则可能不同,而大多数的机器都是使用算术右移的。 C 语言中的左移和右移是两个基本的位运算符,分别用 和 &gt;&gt; 表示,左移是逻辑/算术左移,右移是算术右移,会保持...

    Java移位运算符1

    而对于无符号整数(如`int`或`long`),右移操作的结果可能不是预期的除法结果,因为它不考虑符号位。 3. 无符号右移运算符(&gt;&gt;&gt;) 无符号右移运算符(&gt;&gt;&gt;)与右移运算符不同,它不管数值的符号位,右移操作时所有...

    2021年JAVA学习笔记.doc

    * 移位运算符:左移、右移、无符号右移 * API Java.lang.Integer.toHexString(int i):将整型转换为其相应十六进制数 * 移位运算效率要高于存储运算,在某些讲求效率程序中,应考虑使用移位运算 八、面向对象编程 ...

    易语言有符号转换到无符号源码-易语言

    有符号数可以表示正负数值,其最高位通常用于存储符号(0为正,1为负),而无符号数则只能表示非负数值,所有位都用来存储数值的大小。在易语言中,整型数据类型(如整数、长整数)默认是有符号的,但你可以通过特定...

    20191220-Java位运算_java_位运算_

    Java提供了六种基本的位运算符:按位与(&),按位或(|),按位异或(^),按位非(~),左移(),右移(&gt;&gt;)和无符号右移(&gt;&gt;&gt;). 2. **按位与(&)** 当两个操作数的相应位都是1时,按位与的结果为1,否则为0。这种运算常用于...

    java代码-ByteUShift

    位运算直接作用于二进制表示的数字,包括按位与(&)、按位或(|)、按位异或(^)、左移()、右移(&gt;&gt;)和无符号右移(&gt;&gt;&gt;)。这些运算符在处理二进制数据,如二进制标志、位字段或进行高效的计算时非常有用。 **...

    深入理解计算机系统复习参考 (1).docx

    对于无符号整数,无论是左移还是右移,高位都会填充0。对于有符号整数,右移时高位填充的值取决于实现,通常在x86架构上,负数右移会保留符号位。 再者,掩码(Mask)是一种用来标识和操作整数特定位的机制。例如,...

    shl_shr_l_shr_l_shl.rar_visual c

    移位运算符在C语言中分为三种类型:左移(),右移(&gt;&gt;)和无符号右移(&gt;&gt;&gt;),但在C语言中没有无符号右移操作符,所以我们将主要关注左移()和右移(&gt;&gt;)。 1. 左移运算符(): 左移运算符将数字的二进制表示向...

    Java 运算符 动力节点Java学院整理

    **位运算符** 用于对整数类型的二进制位进行操作,包括按位与(&), 按位或(|), 按位异或(^), 左移(), 右移(&gt;&gt;), 无符号右移(&gt;&gt;&gt;). 例如: ```java int num1 = 5; // 二进制表示为 0101 int num2 = 3; // 二进制表示为...

    Java基础入门学习教程PPT课件 JAVA语言程序设计 JAVA_03 JAVA语言基础 位运算(共21页).ppt

    补码是计算机系统中用来表示有符号整数的标准方式,它解决了负零的问题。正数的原码、反码和补码相同,负数的补码是其原码取反后再加1。例如,-7的补码是11111001,因为10000111取反后为01111000,再加上1得到...

    core java 小结

    符号扩展和无符号扩展也是理解补码的关键,而移位操作如右移(`&gt;&gt;`)、左移(`)和逻辑右移(`&gt;&gt;&gt;`)则用于改变数值。 #### 六、BMP文件格式 BMP文件的头2-5字节存储着图像文件的大小,这对于解析和处理BMP图像至关重要...

    java位运算符[借鉴].pdf

    位运算符包括按位非(NOT)、按位与(AND)、按位或(OR)、按位异或(XOR)、右移(Right Shift)、无符号右移(Unsigned Right Shift)以及相应的赋值运算符。这些运算符在处理二进制数据时非常有用,尤其是在优化...

    Java二进制操作(动力节点Java学院整理)

    在Java中,有三种主要的移位操作符:左移(),右移(&gt;&gt;),以及无符号右移(&gt;&gt;&gt;)。 1. **左移()**:左移操作符将数字的所有位向左移动指定的次数。例如,1 将1的二进制表示左移一位,得到00000010,即2。左移...

    JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解

    - 特性:由于是“无符号”,这意味着无论原数字是正还是负,结果都会被看作是正数。这与有符号右移运算符 `&gt;&gt;` 不同,后者在负数右移时左侧会填充1。 - 示例:`10 &gt;&gt;&gt; 1`。10的二进制表示为 `1010`,右移一位后...

    水滴石穿C语言之C语言的底层操作.doc

    右移操作中,如果被移位的数是无符号类型,空出来的位会被0填充;如果是有符号类型,填充位可能是0或者符号位,具体取决于编译器的实现。移位的位数必须是非负整数,且不能超过变量所占用的位数,否则会导致非法操作...

    kj-第11章位运算ppt课件(全).ppt

    对于负整数,高位补1(这通常取决于编译器,如TurboC系统)。例如,负数右移后会保持其负号不变,但高位填充1。 位运算的其他两个运算符是: 4. **按位与**:`&`运算符,它对两个数的每一位进行逻辑与运算,只有当...

    JAVASCRIPT通过移位操作实现四则运算

    位移操作符主要有左移(),右移(&gt;&gt;)和无符号右移(&gt;&gt;&gt;)。 1. 左移操作符():将一个数的所有位向左移动指定的位数。左侧空出的位用0填充,相当于乘以2的幂次方。例如,`5 等同于`5 * 2^2`,结果是20。 2. ...

    Java语法基础和流程控制.ppt

    4. 位运算符:如按位取反(~), 位与(&), 位或(|), 位异或(^), 左移(), 右移(&gt;&gt;), 无符号右移(&gt;&gt;&gt;),这些运算符作用于整型或字符型数据的二进制表示。 5. 条件运算符:也称为三元运算符,形式为`表达式1 ? 表达式2 : ...

    浅谈java中的移动位运算:,&gt;&gt;&gt;

    无符号右移运算符 `&gt;&gt;&gt;` 的特点是忽略符号位,无论原始数字是正还是负,空出的位总是用零填充。因此,`&gt;&gt;&gt;` 对于正数和负数的处理方式相同。例如,-5使用无符号右移一位,结果是2147483643(二进制为...

Global site tag (gtag.js) - Google Analytics