前端也学学有符号数和无符号数

前言

今天来学习一下什么是有符号整数和无符号整数之间的转换,并且和十进制数之间的转换。
主要分为两点:
1、大致了解一下什么有符号整数,和无符号整数。
2、掌握有符号和无符号整数之间的转换方法。

什么是有符号数:

有符号数是针对二进制来讲的。用最高位作为符号位,“0”代表正,“1”代表负;
有符号数的编码方式,常用的是补码,另外还有原码和反码等。
用不同二进制编码方式表示有符号数时,所得到的机器数可能不一样,但是真值是相同的。

举个例子:
1、原码
原码就是符号位加上真值的绝对值,即用第一位表示符号其余位表示值。
比如如果是8位二进制:

1的原码 = 0000 0001
-1的原码 = 1000 0001

3、反码
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上,符号位不变,其余各个位取反。

1 = (00000001)= (00000001)-1 = (10000001)= (11111110)

4、补码
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(即在反码的基础上+1)

+1 = (00000001)= (00000001)= (00000001)-1 = (10000001)= (11111110)= (11111111)

什么是无符号数:

无符号数是相对于有符号数而言的,指的是整个机器字长的全部二进制位均表示数值位,相当于数的绝对值。
无符号数是针对二进制来讲的,无符号数的表数范围是非负数。

例如:

无符号数:
1111表示15。
有符号数:
1111-7

无符号数和有符号数转换:

无符号数转为有符号数
1、如果无符号数的最高位为1,则将无符号数取补码,得到的数就是有符号数。
2、首先判无符号数的最高位是否为1,如果不为1,则有符号数就直接等于无符号数。如果为1,就将无符号数取补码,得到有符号数。
举个例子:

2的原码是:0000 0010  最高位是0  所以结果是    0000 0010
130的原码是:1000 0010  最高位是1  取补码为1111 1110  所以结果是    1111 1110

有符号数转为无符号数
1、有符号数转换为无符号数,看有符号数的最高位是否为1,如果不为1(即为0),则无符号数就直接等于有符号数。
2、如果有符号数的最高位为1,则将有符号数取补码,得到的数就是无符号数。
举个例子:

2的原码是:0000 0010  最高位是0  所以结果是    0000 0010
-2的原码是:1000 0010  最高位是1  所以结果是    1111 1110

如有问题欢迎指出

猜你喜欢

转载自blog.csdn.net/qq_43205326/article/details/130740487
今日推荐