java反码_【Java基础归纳】原码,反码,补码

java的基本类型

在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型和1种用于表示真值的boolean类型。(一个字节等于8个bit)

类型

字节数

bit(位)数

取值范围

备注

整型

int

4字节

4*8

short

2字节

2*8

-32768~32767

long

8字节

8*8

byte

1字节

1*8

-128~127

浮点型

float

4字节

4*8

float类型的数值有一个后缀F(例如:3.14F)

double

8字节

8*8

没有后缀F的浮点数值(如3.14)默认为double类型

char型

char

2字节

2*8

boolean型

boolean

1字节

1*8

false、true

二进制

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”

注:这里以1个字节(8位)举栗子

机器数:

在计算机中表示的带符号的二进制数称为机器数

* [+27] 的二进制是 [ 0001 1011 ]

原码:

原码是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。 原码也是机器数的一种表示方式。

* [+10] = [ 0000 1010 ]

* [-10] = [ 1000 1010 ]

真值:

因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10001010,其最高位1代表负,其真正数值是 -10 而不是形式值138(10001010转换成十进制等于138)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

* [+10] = [ 0000 1010 ] ,真值 = [ +000 1010 ] = +10

* [-10] = [ 1000 0001 ] ,真值 = [ –000 1010 ] = –10

反码:

正数的反码与其原码相同;

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

* [+10] 原码 = [ 0000 1010 ]  反码 = [ 0000 1010 ]

* [-10] 原码 = [ 1000 1010 ]  反码 = [ 1111 0101 ]

补码:

正数的补码与其原码相同;

负数补码为其绝对值各位取反加1;

注:java中是以补码的方式显示内容

* [+10] 原码 = [ 0000 1010 ]  补码 = [ 0000 1010 ]

* [-10] 原码 = [ 1000 1010 ]  补码 = [ 1111 0110 ]

* [-10]的补码算法:

原码 1 0 0 0 1 0 1 0

反码 1 1 1 1 0 1 0 1

-------------------- +1

补码 1 1 1 1 0 1 1 0

总结:

正整数的原码、反码和补码都一样;

负数部分:

原码和反码的相互转换:符号位不变,数值位按位取反

原码和补码的相互转换:负数补码为其绝对值各位取反加1;

补码求原码:

如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。

如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。

拓展

注:这里以1个字节(8位)举栗子

证明: 8 + 2 = 10

[8]补码 0 0 0 0 1 0 0 0

[2]补码 0 0 0 0 0 0 1 0

+

---------------------------

0 0 0 0 1 0 1 0

得出的二进制为补码,转原码后转十进制,的 10

证明: -3 - 2 = -5

1. 转换 (-3) + (-2) = -5

2. 求 -3 -2 的补码

[-3]补码 1 1 1 1 1 1 0 1

[-2]补码 1 1 1 1 1 1 1 0

+

---------------------------

1 1 1 1 1 1 0 1 1 3.算出来的是[补码] 但是溢出了,因为1字节只有8位,则截取8位 后往前截取

1 1 1 1 1 0 1 1

1 0 0 0 0 1 0 1 4.[补码转原码]

---------------------------

1 0 0 0 0 1 0 1 = -5

证明: -10 - 127 = 119

[-127] 1 0 0 0 0 0 0 1

[-3] 1 1 1 1 0 1 1 0

+

---------------------------

1 0 1 1 1 0 1 1 1

0 1 1 1 0 1 1 1

0 1 1 1 0 1 1 1 1.[补码转原码] 正数的补码=原码

---------------------------

0 1 1 1 0 1 1 1 = 119

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值