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
相关推荐
但是,我们需要注意,有符号数和无符号数的右移规则可能不同,而大多数的机器都是使用算术右移的。 C 语言中的左移和右移是两个基本的位运算符,分别用 和 >> 表示,左移是逻辑/算术左移,右移是算术右移,会保持...
而对于无符号整数(如`int`或`long`),右移操作的结果可能不是预期的除法结果,因为它不考虑符号位。 3. 无符号右移运算符(>>>) 无符号右移运算符(>>>)与右移运算符不同,它不管数值的符号位,右移操作时所有...
* 移位运算符:左移、右移、无符号右移 * API Java.lang.Integer.toHexString(int i):将整型转换为其相应十六进制数 * 移位运算效率要高于存储运算,在某些讲求效率程序中,应考虑使用移位运算 八、面向对象编程 ...
有符号数可以表示正负数值,其最高位通常用于存储符号(0为正,1为负),而无符号数则只能表示非负数值,所有位都用来存储数值的大小。在易语言中,整型数据类型(如整数、长整数)默认是有符号的,但你可以通过特定...
Java提供了六种基本的位运算符:按位与(&),按位或(|),按位异或(^),按位非(~),左移(),右移(>>)和无符号右移(>>>). 2. **按位与(&)** 当两个操作数的相应位都是1时,按位与的结果为1,否则为0。这种运算常用于...
位运算直接作用于二进制表示的数字,包括按位与(&)、按位或(|)、按位异或(^)、左移()、右移(>>)和无符号右移(>>>)。这些运算符在处理二进制数据,如二进制标志、位字段或进行高效的计算时非常有用。 **...
对于无符号整数,无论是左移还是右移,高位都会填充0。对于有符号整数,右移时高位填充的值取决于实现,通常在x86架构上,负数右移会保留符号位。 再者,掩码(Mask)是一种用来标识和操作整数特定位的机制。例如,...
移位运算符在C语言中分为三种类型:左移(),右移(>>)和无符号右移(>>>),但在C语言中没有无符号右移操作符,所以我们将主要关注左移()和右移(>>)。 1. 左移运算符(): 左移运算符将数字的二进制表示向...
**位运算符** 用于对整数类型的二进制位进行操作,包括按位与(&), 按位或(|), 按位异或(^), 左移(), 右移(>>), 无符号右移(>>>). 例如: ```java int num1 = 5; // 二进制表示为 0101 int num2 = 3; // 二进制表示为...
补码是计算机系统中用来表示有符号整数的标准方式,它解决了负零的问题。正数的原码、反码和补码相同,负数的补码是其原码取反后再加1。例如,-7的补码是11111001,因为10000111取反后为01111000,再加上1得到...
符号扩展和无符号扩展也是理解补码的关键,而移位操作如右移(`>>`)、左移(`)和逻辑右移(`>>>`)则用于改变数值。 #### 六、BMP文件格式 BMP文件的头2-5字节存储着图像文件的大小,这对于解析和处理BMP图像至关重要...
位运算符包括按位非(NOT)、按位与(AND)、按位或(OR)、按位异或(XOR)、右移(Right Shift)、无符号右移(Unsigned Right Shift)以及相应的赋值运算符。这些运算符在处理二进制数据时非常有用,尤其是在优化...
在Java中,有三种主要的移位操作符:左移(),右移(>>),以及无符号右移(>>>)。 1. **左移()**:左移操作符将数字的所有位向左移动指定的次数。例如,1 将1的二进制表示左移一位,得到00000010,即2。左移...
- 特性:由于是“无符号”,这意味着无论原数字是正还是负,结果都会被看作是正数。这与有符号右移运算符 `>>` 不同,后者在负数右移时左侧会填充1。 - 示例:`10 >>> 1`。10的二进制表示为 `1010`,右移一位后...
右移操作中,如果被移位的数是无符号类型,空出来的位会被0填充;如果是有符号类型,填充位可能是0或者符号位,具体取决于编译器的实现。移位的位数必须是非负整数,且不能超过变量所占用的位数,否则会导致非法操作...
对于负整数,高位补1(这通常取决于编译器,如TurboC系统)。例如,负数右移后会保持其负号不变,但高位填充1。 位运算的其他两个运算符是: 4. **按位与**:`&`运算符,它对两个数的每一位进行逻辑与运算,只有当...
位移操作符主要有左移(),右移(>>)和无符号右移(>>>)。 1. 左移操作符():将一个数的所有位向左移动指定的位数。左侧空出的位用0填充,相当于乘以2的幂次方。例如,`5 等同于`5 * 2^2`,结果是20。 2. ...
4. 位运算符:如按位取反(~), 位与(&), 位或(|), 位异或(^), 左移(), 右移(>>), 无符号右移(>>>),这些运算符作用于整型或字符型数据的二进制表示。 5. 条件运算符:也称为三元运算符,形式为`表达式1 ? 表达式2 : ...
无符号右移运算符 `>>>` 的特点是忽略符号位,无论原始数字是正还是负,空出的位总是用零填充。因此,`>>>` 对于正数和负数的处理方式相同。例如,-5使用无符号右移一位,结果是2147483643(二进制为...