王威java_Java的位运算

本文详细介绍了Java中二进制数的补码表示法,位运算符包括逻辑运算符和移位运算符的用法。重点讨论了左移、右移和无符号右移的操作规则及其数学意义,并通过实例展示了位与、位或、位异或和位非等位运算符的使用。此外,还解释了位运算在数值处理中的应用。
摘要由CSDN通过智能技术生成

1.表示方法:

在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。

(1)正数的最高位为0,其余各位代表数值本身(二进制数)。

(2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1。

2.位运算符

位运算表达式由操作数和位运算符组成,实现对整数类型的二进制数进行位运算。位运算符可以分为逻辑运算符(包括~、&、|和^)及移位运算符(包括>>、<>>)。

3.具体解析过程:

public static void main(String[] args) {

// 1、左移( <

/*

* 1)它的通用格式如下所示: value <

* 左移的规则只记住一点:丢弃最高位,0补最低位

* 如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了332=1位。

*

* 2)运算规则 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。 当左移的运算数是int

* 类型时,每移动1位它的第31位就要被移出并且丢弃; 当左移的运算数是long 类型时,每移动1位它的第63位就要被移出并且丢弃。

* 当左移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。

*

* 3)数学意义 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方

*/

// 4)运算过程

// 0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位补0://

// 0000 0000 0000 0000 0000 0000 0001 0100 换算成10进制为20

System.out.println(5 <

// 2、右移( >> ) 高位补符号位

/*

* 1)它的通用格式如下所示: value >> num num 指定要移位值value 移动的位数。

* 右移的规则只记住一点:符号位不变,左边补上符号位

*

* 2)运算规则: 按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1

* 当右移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。

* 例如,如果要移走的值为负数,每一次右移都在左边补1,如果要移走的值为正数,每一次右移都在左边补0,这叫做符号位扩展(保留符号位)(sign

* extension ),在进行右移

*

* 操作时用来保持负数的符号。

*

*

* 3)数学意义 右移一位相当于除2,右移n位相当于除以2的n次方。

*/

// 4)运算过程

// 0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位补0:

// 0000 0000 0000 0000 0000 0000 0000 0001

System.out.println(5 >> 2);// 运行结果是1

// 3、无符号右移( >>> ) 高位补0

/*

* 它的通用格式如下所示: value >>> num num 指定要移位值value 移动的位数。

* 无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位 无符号右移运算符>>> 只是对32位和64位的值有意义

*/

// 例如 -5换算成二进制后为:0101 取反加1为1011

// 1111 1111 1111 1111 1111 1111 1111 1011

// 我们分别对5进行右移3位、 -5进行右移3位和无符号右移3位:

System.out.println(5 >> 3);// 结果是0

System.out.println(-5 >> 3);// 结果是-1

System.out.println(-5 >>> 3);// 结果是536870911

// 4、位与( & )

// 位与:第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0

System.out.println(5 & 3);// 结果为1

System.out.println(4 & 1);// 结果为0

// 5、位或( | )

// 第一个操作数的的第n位于第二个操作数的第n位 只要有一个是1,那么结果的第n为也为1,否则为0

System.out.println(5 | 3);// 结果为7

// 6、位异或( ^ )

// 第一个操作数的的第n位于第二个操作数的第n位 相反,那么结果的第n为也为1,否则为0

System.out.println(5 ^ 3);// 结果为6

// 7、位非( ~ )

// 操作数的第n位为1,那么结果的第n位为0,反之。

System.out.println(~5);// 结果为-6

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值