前言

今天突然有一个需求用到了位运算符,然后让我好好的回忆了一下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基础——很少用的位运算符

右移

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

无符号右移

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

按位与

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

按位或

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

按位异或

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

按位取反

Java基础——很少用的位运算符
这是因为整数在计算机中是二进制存储的。

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:真心不想看的,可谁知道这个按位取反给我整懵了呢【捂脸哭】)。总的来说这个逻辑还是很重要的。所以计算机组成原理,早就不知道让我给忘到哪去了。

相关文章:

  • 2021-10-17
  • 2021-12-31
  • 2021-06-10
  • 2021-07-16
  • 2021-12-06
  • 2021-12-06
  • 2021-12-06
  • 2021-05-05
猜你喜欢
  • 2021-12-17
  • 2021-11-19
  • 2021-07-13
  • 2021-07-14
  • 2021-07-06
  • 2021-07-25
  • 2021-09-12
相关资源
相似解决方案