java 简述位运算

在开发的时候,经常听到别人说到位运算,虽然大部分的情况下用的不是特别的频繁。
1. 按位与(&)

定义:对两个数进行操作,然后返回一个新的数,这个数的每个位都需要两个输入数的同一位都为1时才为1。
简单的说就是数字二进制化,然后进行比较,相同位的数字都为1时,才能为1。
假设:A = 511,B=100,将数字转化成二进制,A=111111111,B=1100100,如图进行比较:
在这里插入图片描述
A&B=1100100,转化成十进制就是:100。

2.按位或(|)

定义:比较两个数,然后返回一个新的数,这个数的每一位设置1的条件是两个输入数的同一位都不为0(即任意一个为1,或都为1)
简单的来说,就是相同的位置,只要不同时为0,那么就为1。
假设A = 341,B = 181,将数字转换成二进制,A = 101010101,B = 10110101,如图比较:
在这里插入图片描述
A | B = 111110101,转化为十进制:501

3.按位异或(^)

定义:比较两个数,然后返回一个数,这个数的每个位设为1的条件是两个输入数的同一位不同,如果相同就设为0。
简单的来说就是相同的位数,相同为0,不同为1。
假设A = 20,B = 5,转化成二进制,A = 10100,B = 101,如图比较:
在这里插入图片描述
A ^ B = 10001,转化成十进制:17

4.按位取反(~)

定义:将操作数每一位都取反,1变0,0变1。
假设A = 43 如图:
在这里插入图片描述
这是Java的代码,前面的0b000000 表示是二进制的意思,这里就不简述为什么int的二进制是32位了。
取反就是将0变1,1变0,可以看出B就是A取反后的结果。
~A = - 44。

5.按位左移(<<)

定义:将操作数的所有位向左移动指定的位数,空位用0填充。比如:10 << 2 表示将10的二进制向左移动两位,将10转化为二进制:1010 ,向左移动两位,空余位用0补足。如图:
在这里插入图片描述
10 << 2 = 101000,转换成十进制为:40

6.按位右移(>>)

定义:将操作数的所有位向右移动指定的位数,空位用0填充。比如:10 >> 2 表示将10的二进制向右移动两位,将10转化为二进制:1010 ,向左移动两位,空余位用0补足。如图:
在这里插入图片描述
10 >> 2 = 10,转换成十进制:2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值