数制间的转换,原码、反码、补码

简介: 数制间的转换,原码、反码、补码

💻前言

🍁学习计算机相关知识的过程中,我们常用到一些运算基础,这里总结二进制、八进制、十进制、十六进制之间的转换,还有正负数原码、反码、补码的转换!

💻一.数制间的转换

二进制:只有0和1组成

八进制:开头一个0,后面0~7随便组

十进制:开头不为0,后面0~9随便组

十六进制:0x 或0X开头,后面0-9 和A-F随便组

1.非十进制数转化为十进制数字

非十进制数转换为十进制数采用按权位展开再求和的方法!

举例:

二进制数10001101.11转换为十进制数

(10001101.11)2

=1* 2^7 + 0 *2^6 + 0 *2^5 + 0 * 2 ^4 +1 * 2 ^3 + 1 * 2 ^2 + 0 * 2 ^1 + 1 * 2 ^0 + 1 * 2 ^-1 + 1 * 2 ^-1

= 141.75

八进制数337.4转换为十进制数

(337.4)8

=3 * 8^2 + 3 * 8^1 + 7 * 8^0 + 4 * 8^-1

=223.5

十六进制数3BF.4转换为十进制数

在十六进制数转换为时,要将符号A B C D E F还原成10 11 12 13 14 15 进行运算!

(3BF.4)16

=3 * 16^2 + 11 * 16^1 + 15 * 16^0 + 4 * 16^-1

=959.25

2.十进制数转化为非十进制数

将十进制数转化为二进制、八进制或十六进制数等非十进制数的方法时类似的,其步骤是将十进制数转换分整数和小数俩部分进行。

(1)十进制整数转化为非十进制整数。采用“除基取余数法”,即将十进制整数逐次除以转换目标数制的基数,直到商为0为止,将所得余数除自下向上排列即可。

举例:

  • 十进制35转换为二进制、八进制、十六进制

7fc11c8a2de144ff835420d6c2508286.png

所以,35 = (100011)2

7fc11c8a2de144ff835420d6c2508286.png

所以,35 = (43)8

7fc11c8a2de144ff835420d6c2508286.png

  • 所以,35 = (23)16

(2)十进制小数转化为非十进制小数。采用“乘基取整法”,即将十进制小数逐次乘以以转换目标数制的基数,直到小数部分的值为0或满足精度要求为止,然后将得到的整数自上而下排列。

举例:

  • 将十进制数0.25转换成二进制数
  • 7fc11c8a2de144ff835420d6c2508286.png
  • 0.25 = (0.01)2

当十进制小数不能用有限二进制小数精确表示时,根据精度要求,采用“0舍1入”法,取有限二进制小数近似表示。

举例:

  • 将十进制数0.32转换成二进制数(要求精确到小数点后4位)

7fc11c8a2de144ff835420d6c2508286.png

所以:0.32 约等于 (0.0101)2

若十进制数中既有整数,又有小数,则因该将整数部分和小数部分分别进行转换,再将俩者相加,便得到结果。

举例:

将十进制数35.32转换成二进制数

上面得出

35 = (100011)2

0.25 = (0.01)2

所以,35.25 = (10010.01)2

3.二进制与八进制、十六进制的转换

1位八进制数对应3位二进制数,而1位十六进制数对应4位二进制数。

二进制转换为八进制的原则是:整数部分从低位到高位每3位为一组(不足三位高位用0补足)小数部分从高位到低位每三位为一组(不足三位低位用0补足),然后将每组3位二进制数转换成1位八进制数。一组一组的转换成对应的八进制数,即得到转换的结果!

举例:

  • 将二进制数10011110.00111转换为八进制数

7fc11c8a2de144ff835420d6c2508286.png

  • 所以,(10011110.00111)2 = (236.16)8

反之,由八进制数转换成二进制数时,只要将每位八进制数转换成对应的3位二进制数即可。

举例:

  • 将八进制数261.34转换为二进制数

7fc11c8a2de144ff835420d6c2508286.png

  • 所以,(261.34)8 = (10110001.0111)2

类似的十六进制转换为二进制数时,只要将每位十六进制数转换成对应的4位二进制数表示。

举例:

  • 将二进制数10011110.00111转换成十六进制数,十六进制数5A.E8转换为二进制数。

7fc11c8a2de144ff835420d6c2508286.png

所以,(10011110.00111)2 = (9E.38)16

7fc11c8a2de144ff835420d6c2508286.png

所以,(5A.E8)16 = (1011010.11101)2


💻二.原码、反码、和补码的转换

要知道在计算机当中数据是以二进制补码的形式存储的,一个数写成它所对应成二进制序列便是这个数的原码,以整形数据为例,一个int整形数据在内存中占4字节(32比特位),对应32位二进制数。

二进制序列的首位为符号位,为0表示正数,为1表示负数。

1.正数的原反补

直接按照正负数的形式翻译成二进制就可以。

比如1二进制序列,也就是原码

7fc11c8a2de144ff835420d6c2508286.png

正数的反码和补码与原码是相同的

2.负数的原反补

以 -1 为例

-1 的原码如下:
直接按照正负数的形式翻译成二进制就可以。

7fc11c8a2de144ff835420d6c2508286.png

求负数的反码,将原码的符号位不变,其他位依次按位取反就可以得到了。
-1的反码:

7fc11c8a2de144ff835420d6c2508286.png

负数的补码是在反码的基础上加1得到:

7fc11c8a2de144ff835420d6c2508286.png

根据补码求反码及原码倒推回去即可,也就是补码减一得到反码,再将反码符号位不变,其他位按位取反得到原码!

这里再介绍另一种根据补码求原码的方法,补码的符号位不变,其他位按位取反,然后在此基础上再加一便求出了原码。


目录
相关文章
|
3月前
原码、反码、补码的互相转换
原码、反码、补码的互相转换
32 0
|
1月前
原码反码补码移码的介绍和计算
原码反码补码移码的介绍和计算
52 0
|
4月前
|
存储
原码,反码,补码以及计算
原码,反码,补码以及计算
23 0
|
10月前
原码补码反码
原码补码反码
88 0
|
机器学习/深度学习 存储
数据的表示:原码、反码、补码、移码以及浮点数的运算
数据的表示:原码、反码、补码、移码以及浮点数的运算
349 0
数据的表示:原码、反码、补码、移码以及浮点数的运算
|
存储
一篇轻松带你Carry原码、反码、补码(建议收藏)
一篇轻松带你Carry原码、反码、补码(建议收藏)
170 0
原码、反码、补码
原码、反码、补码区别
116 0
|
Java
进制转换、原码、反码、补码及位运算详解
进制转换、原码、反码、补码及位运算的简单示例
485 1
进制转换、原码、反码、补码及位运算详解
|
存储 前端开发 索引
|
Java C++
快速理解原码、反码、补码
学弟不懂原码反码补码,气的我给女朋友彻底讲了一夜
340 0
快速理解原码、反码、补码