数制间的转换,原码、反码、补码
💻前言🍁学习计算机相关知识的过程中,我们常用到一些运算基础,这里总结二进制、八进制、十进制、十六进制之间的转换,还有正负数原码、反码、补码的转换!💻目录一.数制间的转换——1.非十进制数转化为十进制数字——2.十进制数转化为非十进制数——3.二进制与八进制、十六进制的转换二.原码、反码、和补码的转换——1.正数的原反补——2.负数的原反补💻一.数制间的转换二进制:只有0和1组成八进制:开头
💻前言
🍁学习计算机相关知识的过程中,我们常用到一些运算基础,这里总结二进制、八进制、十进制、十六进制之间的转换,还有正负数原码、反码、补码的转换!
💻目录
一.数制间的转换
——1.非十进制数转化为十进制数字
——2.十进制数转化为非十进制数
——3.二进制与八进制、十六进制的转换
二.原码、反码、和补码的转换
——1.正数的原反补
——2.负数的原反补
💻一.数制间的转换
二进制:只有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得到:
根据补码求反码及原码倒推回去即可,也就是补码减一得到反码,再将反码符号位不变,其他位按位取反得到原码!
这里再介绍另一种根据补码求原码的方法,补码的符号位不变,其他位按位取反,然后在此基础上再加一便求出了原码。
💻结语
各位小伙伴,看到这里就是缘分嘛,希望我的这些内容可以给你带来那么一丝丝帮助,可以的话三连支持一下呗(关注✌️点赞✌️评论✌️)!!!
感谢每一位走到这里的小伙伴,我们可以一起学习交流,一起进步!!!加油!!!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)