💻前言
🍁学习计算机相关知识的过程中,我们常用到一些运算基础,这里总结二进制、八进制、十进制、十六进制之间的转换,还有正负数原码、反码、补码的转换!
💻一.数制间的转换
二进制:只有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转换为二进制、八进制、十六进制
所以,35 = (100011)2
所以,35 = (43)8
- 所以,35 = (23)16
(2)十进制小数转化为非十进制小数。采用“乘基取整法”,即将十进制小数逐次乘以以转换目标数制的基数,直到小数部分的值为0或满足精度要求为止,然后将得到的整数自上而下排列。
举例:
- 将十进制数0.25转换成二进制数
- 0.25 = (0.01)2
当十进制小数不能用有限二进制小数精确表示时,根据精度要求,采用“0舍1入”法,取有限二进制小数近似表示。
举例:
- 将十进制数0.32转换成二进制数(要求精确到小数点后4位)
所以: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转换为八进制数
- 所以,(10011110.00111)2 = (236.16)8
反之,由八进制数转换成二进制数时,只要将每位八进制数转换成对应的3位二进制数即可。
举例:
- 将八进制数261.34转换为二进制数
- 所以,(261.34)8 = (10110001.0111)2
类似的十六进制转换为二进制数时,只要将每位十六进制数转换成对应的4位二进制数表示。
举例:
- 将二进制数10011110.00111转换成十六进制数,十六进制数5A.E8转换为二进制数。
所以,(10011110.00111)2 = (9E.38)16
所以,(5A.E8)16 = (1011010.11101)2
💻二.原码、反码、和补码的转换
要知道在计算机当中数据是以二进制补码的形式存储的,一个数写成它所对应成二进制序列便是这个数的原码,以整形数据为例,一个int整形数据在内存中占4字节(32比特位),对应32位二进制数。
二进制序列的首位为符号位,为0表示正数,为1表示负数。
1.正数的原反补
直接按照正负数的形式翻译成二进制就可以。
比如1二进制序列,也就是原码
正数的反码和补码与原码是相同的
2.负数的原反补
以 -1 为例
-1 的原码如下:
直接按照正负数的形式翻译成二进制就可以。
求负数的反码,将原码的符号位不变,其他位依次按位取反就可以得到了。
-1的反码:
负数的补码是在反码的基础上加1得到:
根据补码求反码及原码倒推回去即可,也就是补码减一得到反码,再将反码符号位不变,其他位按位取反得到原码!
这里再介绍另一种根据补码求原码的方法,补码的符号位不变,其他位按位取反,然后在此基础上再加一便求出了原码。