【JavaSE】原码,反码,补码计算规则;基本数据类型取值范围的计算原理
2023-12-18 16:41:26
原码反码补码概念和计算
补码是计算机底层存储数据的方式
-
对于正数:
原码:最高符号位为0,其他按数计算
反码、补码都与原码一样。 -
对于负数:
原码:最高符号位为1,其他按数计算
反码:原码中除符号位,其他的数值位按位取反,即0变1,1变0
补码:反码+1 -
以byte类型示例:
byte是1个字节,一个字节为1Byte = 8 bit位
-
1的原码,反码,补码:0000 0001
-
-1的原码:1000 0001
反码:1111 1110
补码:1111 1111 -
24的原码,反码,补码为:0001 1000
-
-24的原码:1001 1000
反码:1110 0111
补码:1110 1000
基础数据类型取值范围的计算
- byte数据类型1字节
0000 0000 = +0
- 最大正数的补码:0111 1111 = 2^7 - 1
- 最大负数的补码:1000 0000 = - 2^7
反码 :1111 1111
原码: 1000 0000 = - 0 看起来代表-0
但底层代表 - 2^7
分析:相当于是把-0
默认定为-2^(bit位-1)
一个最高位做符号位,而-0的补码,相当于最高位又做负数符号又算作数值位,所以取值范围负数比正数多一个-0
即 -2^(bit位-1)
其他字节依次类推
- short 2字节
00000000 00000000 = +0
- 最大正数的补码:01111111 11111111 = 2^15 - 1
- 最大负数的补码:10000000 00000000 = - 2^15
反码: 11111111 11111111
原码:10000000 00000000 = - 0 = - 2^15
- int 4 字节
00000000 00000000 00000000 00000000 = +0
- 最大正数的补码:01111111 11111111 11111111 11111111 = 2^31 - 1
- 最大负数的补码:10000000 00000000 00000000 00000000= - 2^31
反码:11111111 11111111 11111111 11111111
原码:10000000 00000000 00000000 00000000 = - 0 = - 2^31
原理:
有两种0的表示方法,即“+0”和“-0”。
实际上,在32位系统下int类型中,我们计算机已经强行规定了这种情况,数字0采用“+0”的表示方法,即00000000 00000000 00000000;而“-0”这个特殊的数字被定义为了-2^31。
无符号整形,4字节,32位全是数值位。
类型名称 | 占字节数 | 取值范围 |
---|---|---|
int | 4B | -2^31 ~ 2 ^31-1 |
unsigned int | 4B | 0 ~ 2^32 |
文章来源:https://blog.csdn.net/qq_24990383/article/details/135046376
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!