位运算符取反_Java常见的运算符——位运算

cd2d7aafa61ee59ff5f2a78182d7e7ee.png

位运算符

<<左移

先说左移运算符,它的符号表示是<<

举个例子,先定义一个int类型的数,十进制的value = 733183670,转换成二进制在计算机中的表示如下(int类型占4个字节):

e55ebec6074dc1a0df1bf73994357257.png

value << 1,代表左移1位,运算过程如下:

5d73535b64c76f9baae60520faf5c839.png

那么如果往左移8位呢,value << 8

072dfc281929a3d2e4fad80c11a9ddf3.png

左移8位后变成了十进制的值为:-1283541504,移动8位后,由于首位变成了1,也就变成了负数,在使用左移运算符时要考虑变成负数的情况。

>>右移

再来说说右移运算符,它的符号是>>

依旧设定value = 733183670,向右移8位,运算过程如下:

08c5d32e678f38589fdac8804263574b.png

和左移一样,缺失位补0,但是需要注意负数的右移

设定value = -733183670,需要注意负数在计算机中的存储形式是其同值正数的补码

先说个分支:原码、反码、补码

int类型的‍+1的原码是:

1e373de40de72b1978dd7b4de74658c3.png

int类型的+1的反码是(原码各位取反)

efa1eeb523085c30c92f2430c520d41d.png

int类型的+1的补码是(反码末位加1)

09814eaecfd335125d0f252730bd1b66.png

普及了补码的知识,那么接着说value = -733183670,如果它往右移8位呢?

05564d2b6a4adb254d9165ca11b5c8c8.png

>>>无符号右移

还有一个无符号右移运算符>>>

无符号右移运算符>>>和右移运算符>>是一样的,只不过右移时左边是补上符号位,而无符号右移运算符是补上0

02bfcc38400e45f8f04f834436067929.png

&与运算

&它既是一个逻辑运算符,也是一个位运算符,那么它在位运算中如何表示呢?

以3&5运算为例,先将3和5转化为二进制数,具体计算如下:

5570f95661baee8e16112ea1f79b7970.png

结论:对应位同为1时,才为1,否则全为0(对应位只要有0,全为0,否则为1)。

另外:也可以把1理解为true,把0理解为false, true和false进行与&运算时,必须同为true时结果才为true。

|或运算

和与运算逻辑相似,不同的是对应为数字的判断:

53a08472b5ac07ac6b0f24dc2371c29f.png

总结:对应位只要有1时,即为1,否则全为0(对应位只有全是0时,结果才是0,否则为1)。

另外:也可以把1理解为true,把0理解为false, true和false进行或|运算时,只要有true,结果即为true。

~非运算

以~3为例:

ef6bf2480fe166f3dffe4d8aaa899307.png

总结:对每位进行取反。

^异或运算

以3^5为例:

63edc674233a1a7039b4682d48ea83d4.png

总结:只要对应为不同即为1。

三元运算符

三元运算符有一个标准语法a?b:c

用文字解释就是a为布尔表达式,b和c为同一类型的表达式或值,当a=true时,整个表达式的值为b的值,否则为c的值。

注意事项:

  • 必须同时保证表达式b和表达式c都符合被赋值变量数据类型的要求。
  • 三元运算符的结果必须被使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值