【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进行投诉反馈,一经查实,立即删除!