美文网首页
位 相关

位 相关

作者: 一个追寻者的故事 | 来源:发表于2020-04-23 13:43 被阅读0次
基本概念

我们都知道,整数在计算机中是以 二进制 表示的。
Java 中的 有符号的 int 四字节(8位字节)为例:

二进制 十进制
01111111 11111111 11111111 11111111 2147483647(Integer.MAX_VALUE)
............ .....
00000000 00000000 00000000 00000101 5
00000000 00000000 00000000 00000100 4
00000000 00000000 00000000 00000011 3
00000000 00000000 00000000 00000010 2
00000000 00000000 00000000 00000001 1
00000000 00000000 00000000 00000000 0
11111111 11111111 11111111 11111111 -1
11111111 11111111 11111111 11111110 -2
11111111 11111111 11111111 11111101 -3
11111111 11111111 11111111 11111100 -4
11111111 11111111 11111111 11111011 -5
....... ......
1000000 0000000 0000000 0000000 -2147483648(Integer.MIN_VALUE)
原码、反码、补码

计算机中,正整数用原码存储,负整数用 正整数的 补码存储。(这一套规则,既实现简单又运行高效。当然也可以定义其它规则,就看能不能更高效、实现更简单)

以十进制中的 1 为例:
原码: 00000000 00000000 00000000 00000001
反码: 11111111 11111111 11111111 11111110
补码: 11111111 11111111 11111111 11111111

反码 为 原码按位取反,补码 = 反码 + 1

其实不管怎么样存储 正整数、负整数,最终都要满足 A + (-A) = 0
任何一个 正整数 的原码 + 反码 的结果都是 11111111 11111111 11111111 11111111。 所以再 + 1,结果就都为 00000000 00000000 00000000 00000000 。 所以 负整数 用补码表示 正好满足:A + (-A) = 0

其它

1、问:为什么 int 能表示的 正整数负整数 少一个呢?
答:因为 0 占用了 正整数 所能表达的一个份额

2、在Java 中可以给 int 用 10进制 赋值,也可以用 16进制 赋值,当然也可以直接用位运算的结果赋值。

/**
使用十进制赋值时,会在运行时自动转成 二进制(整数用原码、复数用补码) 去运算和计算。
**/
int a = 5;
int b = -6;

/**
如果使用以下方式赋值。会看最高位,如果是0,会认为是 正整数的原码形式;如果是 1,会认为是 负整数 的补码形式
**/
int c = 0x7fffffff;
int d = 1 << 30;

3、关于位运算的一个有意思的

位运算 二进制结果 十进制结果
1 << 30 01000000 00000000 00000000 00000000 1073741824
1 << 31 10000000 00000000 00000000 00000000 Integer.MIN_VALUE
1 << 31 00000000 00000000 00000000 00000001 1
1 << 32 00000000 00000000 00000000 00000010 2
1 << 33 00000000 00000000 00000000 00000100 4

相关文章

  • 位 相关

    基本概念 我们都知道,整数在计算机中是以 二进制 表示的。以Java 中的 有符号的 int 四字节(8位字节)...

  • 554. 砖墙/ 201. 数字范围按位与

    554. 砖墙 相关标签 : 哈希表 201. 数字范围按位与 相关标签: 位运算

  • 位运算及用位运算实现权限控制

    请自行补习位运算相关知识 位运算 位运算示例 权限控制

  • Java位操作相关知识总结

    位操作 位操作即将数字转为二进制形式后,按照二进制位进行操作,位操作主要包括如下几种。 & 按位与1 & 1 = ...

  • 算法整理(1) 位运算相关

    运算符 位运算符用来对二进制位进行操作,Java中提供了如下的位运算符:位运算符中,除 ~ 以外,其余均为二元运算...

  • day7 位运算相关

    在计算机编程中,整数可以通过二进制、八进制、十进制、十六进制来表示 1.进制 1.十进制a.基数:0,1,2,3,...

  • 【MySQL】保留2位小数相关函数

    一.TRUNCATE(X, D) X是数值,D是保留小数的位数。 其作用就是按照小数位数,进行数值截取(此处的截取...

  • LeetCode中位运算相关算法汇总!!!

    前提知识: <<表示左移移,不分正负数,低位补0; >>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;...

  • Swift学习(二)---数值类型

    一、整数 Int Swift中的Int是跟所在平台的位数相关的,64位平台就是64位有符号整数,32位就是32位的...

  • TCP

    TCP/IP卷1TCP相关章节18-22章 首部格式 16位源端口号,16位目标端口号32位序号32位确认序号4位...

网友评论

      本文标题:位 相关

      本文链接:https://www.haomeiwen.com/subject/vegoihtx.html