【JavaSE】原码,反码,补码计算规则;基本数据类型取值范围的计算原理

发布时间:2023年12月18日

原码反码补码概念和计算

补码是计算机底层存储数据的方式

  1. 对于正数:
    原码:最高符号位为0,其他按数计算
    反码、补码都与原码一样。

  2. 对于负数:
    原码:最高符号位为1,其他按数计算
    反码:原码中除符号位,其他的数值位按位取反,即0变1,1变0
    补码:反码+1

  3. 以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

基础数据类型取值范围的计算

  1. 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)其他字节依次类推

  1. short 2字节
    00000000 00000000 = +0
  • 最大正数的补码:01111111 11111111 = 2^15 - 1
  • 最大负数的补码:10000000 00000000 = - 2^15
    反码: 11111111 11111111
    原码:10000000 00000000 = - 0 = - 2^15
  1. 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位全是数值位。

类型名称占字节数取值范围
int4B-2^31 ~ 2 ^31-1
unsigned int4B0 ~ 2^32
文章来源:https://blog.csdn.net/qq_24990383/article/details/135046376
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。