Java基础——很少用的位运算符

前言

今天突然有一个需求用到了位运算符,然后让我好好的回忆了一下java基础,说实话我真的把位运算符的相关方法忘的死死的。所以为了纪念逝去的时光,写下了这篇基础中的基础,也算是给自己提个醒要时不时的去回去看看基础,要不然都没有进步的空间了。

正文

基础的东西基本上都是看一眼就能想起来的。比如下边这一眼。
位运算符的列表:

名称符号
左移<<空位补0,被移除的高位丢弃,空缺位补0。
右移>>被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。
无符号右移>>>被移位二进制最高位无论是0或者是1,空缺位都用0补。
按位与&二进制位进行&运算,只有1&1时结果是1,否则是0;
按位或|二进制位进行
按位异或^相同二进制位进行 ^ 运算,结果是0; 1^ 1=0 , 0^ 0=0不相同二进制位 ^ 运算结果是1。 1^ 0=1 , 0^1=1
按位取反~正数取反,各二进制码按补码各位取反。负数取反,各二进制码按补码各位取反

分开来解释如下:

左移

在这里插入图片描述

右移

在这里插入图片描述

无符号右移

在这里插入图片描述

按位与

在这里插入图片描述

按位或

在这里插入图片描述

按位异或

在这里插入图片描述

按位取反

在这里插入图片描述
这是因为整数在计算机中是二进制存储的。

java中 ~5=-6 ,而这个-6是输出到屏幕上,我们看到的是-6。

首先看对5求反,

5的二进制原码是:0000 0000 0101,

取反之后是:1111 1111 1010 ,得到的这个值在计算机中的存储原型也是 1111 1111 1010,而要把这个结果显示出来,到计算机屏幕上就要转换成十进制,也就是说 1111 1111 1010 是补码形式,

补码 = 原码取反 + 1。

补码要换算成对应的十进制就是

原码取反 = 补码 -1

所以1111 1111 1010 - 1 = 1111 1001, 然后再对1111 1111 1001 取反,得到 1000 0000 0110,

所以 原码就是 1000 0000 0110,对应的十进制就是 -6。

同样的,这样看也行:

-6在计算机中的存储为二进制补码形式,也就是说-6的补码是 1000 0000 1010 (-6的二进制原码是:1000 0000 0110,源码取反之后是 1111 1111 1001,再加上1就是 1111 1111 1010,这就是补码了)。

结束

本来感觉这篇文章应该是个水文,可是写到最后感觉没有那么简单,所以又重新把,反码,补码的相关内容看了一遍,(ps:真心不想看的,可谁知道这个按位取反给我整懵了呢【捂脸哭】)。总的来说这个逻辑还是很重要的。所以计算机组成原理,早就不知道让我给忘到哪去了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值