
Java位运算,负数的二进制表示形式,int类型最大值为什么是2的31次方-1
发布日期:2021-05-15 00:00:43
浏览次数:7
分类:精选文章
本文共 1641 字,大约阅读时间需要 5 分钟。
二进制中负数如何表示?
在计算机中,我们使用补码来表示数字,尤其是负数。这意味着所有数字的二进制表示中,最高位(即最左边的位)为标志位。标志位的值决定了数字的符号:0表示正数,1表示负数。这种统一的表示方式使得加法和减法操作可以统一处理。
各种码的定义
原码
- 原码:正数的原码是其绝对值的二进制表示。
- 反码:负数的反码是将正数的原码除去符号位(即最高位的1)后各位取反。
- 补码:
- 正数的补码与原码相同。
- 负数的补码是对其原码(除去符号位)进行各位取反后再加1。
补码的优势
补码能够简化加法和减法操作,使得减法可以转化为加法的形式,从而提高计算效率。由于补码的处理统一性,它在计算机中被广泛使用。
一个字节中的负数表示实例
以一个字节(8位)为例,分析如何用补码表示负数。
正数5的二进制表示
- 原码:0000 0101
- 反码:1111 1010
- 补码:1111 1011
负数-5的二进制表示
- 原码:1000 0101
- 反码:1111 1010
- 补码:1111 1011
① 如何计算-5的十进制值?
- 先将补码(1111 1011)减去1,得到反码(1111 1010)。
- 最后,将反码转换为十进制:-5。
所以,-5在二进制中的补码表示为:1111 1011。
Java中的位运算
在Java中,位运算以&
(与)、|
(或)、~
(非)、^
(异或)为主要运算符。
按位运算示例
与运算(&)
- 两个位中有且仅有1,结果才为1。
- 示例:9 & 8
- 9的二进制:0000 1001
- 8的二进制:0000 1000
- 结果:8(二进制为:0000 1000)
或运算(|)
- 两个位中有且仅有1,则结果为1。
- 示例:9 | 8
- 结果:9(二进制为:0000 1001)
非运算(~)
- 将0变为1,1变为0。对于正数9:
- 二进制:0000 1001
- 非操作后:1111 0110
- 这是一个负数,其补码为:1000 1010,对应十进制值为-10。
异或运算(^)
- 两个位不同时为1,结果为1。
- 示例:9 ^ 8
- 结果:1(二进制为:0000 001)
移位运算
在Java中,移位运算可以针对整数类型进行。移位后的高位丢弃,低位补零或1,具体取决于移位方向和数值符号。
左移(<<)和右移(>>)示例
左移(<<)
- 8位移除后,二进制位全部左移,高位丢弃,低位补零。
- 示例:9 << 2
- 二进制:0000 1001 左移两位后:0010 0100
- 十进制:36
右移(>>)
- 移位时若为正数,高位插入0;若为负数,高位插入1。
- 示例:9 >> 2
- 二进制:0000 1001 右移两位后:0000 0010
- 十进制:2
无符号右移(>>>)
- 不论是正数还是负数,高位插入0。
- 示例:9 >>> 2
- 结果:2(二进制为:0000 0010)
int类型的取值范围
int类型占4个字节(32位),其二进制表示方式为:
0000 0000 0000 0000 0000 0000 0000 0000 0000
正数情况:二进制最高位为0,最大的数为:
01111111 11111111 11111111 11111111
,对应十进制数值为2^31 - 1
。负数情况:二进制最高位为1,最小的数为:
10000000 00000000 00000000 00000001
,对应十进制数值为-2^31
。零的表示:二进制下,只有一种表示形式:
- 正数0:
0000 0000 0000 0000 0000 0000 0000 0000
- 负数0:
1000 0000 0000 0000 0000 0000 0000 0000
- 正数0:
这里需要注意:-2^31并不是一个有效的补码,它通过10000000 00000000 00000000 00000001
来表示。
(补充说明:-2^31
的二进制表示为:11111111 11111111 11111111 11111111
,这也是Integer.MIN_VALUE
。)
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月11日 14时47分13秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
python中列表 元组 字典 集合的区别
2019-03-07
python struct 官方文档
2019-03-07
Android DEX加固方案与原理
2019-03-07
Android Retrofit2.0 上传单张图片和多张图片
2019-03-07
iOS_Runtime3_动态添加方法
2019-03-07
Leetcode第557题---翻转字符串中的单词
2019-03-07
Problem G. The Stones Game【取石子博弈 & 思维】
2019-03-07
Unable to execute dex: Multiple dex files
2019-03-07
Java多线程
2019-03-07
Unity监听日记
2019-03-07
AndroidStudio跳到错误位置
2019-03-07
openssl服务器证书操作
2019-03-07
expect 模拟交互 ftp 上传文件到指定目录下
2019-03-07
linux系统下双屏显示
2019-03-07
PDF.js —— vue项目中使用pdf.js显示pdf文件(流)
2019-03-07
我用wxPython搭建GUI量化系统之最小架构的运行
2019-03-07
我用wxPython搭建GUI量化系统之多只股票走势对比界面
2019-03-07
selenium+python之切换窗口
2019-03-07
重载和重写的区别:
2019-03-07
搭建Vue项目步骤
2019-03-07