⼗进制负数转换为⼆进制、⼋进制、⼗六进制的知识分享
这篇⽂章主要介绍了⼗进制负数转换为⼆进制、⼋进制、⼗六进制的知识分享,需要的朋友可以参考下
程序猿们或许对⼆进制都不陌⽣,⼆进制是计算技术中⼴泛采⽤的⼀种数制。⼆进制数据是⽤0和1两个数码来表⽰的数。但是很多⼈都会将⼆进制转换成整数,但是如何⽤⼆进制表⽰负数呢?有的⼈会说,在⼆进制前⾯加个负数符合。⽽计算机只能认识0 和 1,⼜怎么去加个额外的负数符号呢?于是我们就需要⽤0和1来表⽰负数。如果想要弄懂这个,我们需要先了解什么是⼆进制原码。
原码是什么
原码(true form)是⼀种计算机中对数字的⼆进制定点表⽰⽅法。原码表⽰法在数值前⾯增加了⼀位符号位(即最⾼位为符号位):正数该位为0,负数该位为1(0有两种表⽰:+0和-0),其余位表⽰数值的⼤⼩。
简单直观;例如,我们⽤8位⼆进制表⽰⼀个数,+11的原码为00001011,-11的原码就是10001011
原码不能直接参加运算,可能会出错。例如数学上,1+(-1)=0,⽽在⼆进制中00000001 + 10000001 = 10000010,换算成⼗进制为-2。显然出错了。
⼆进制原码、补码和反码
2进制转十进制在线计算器⼗进制如何转换成⼆进制
我们如何把⼗进制的-3,转换成⼆进制表⽰呢?⾸先我们将 -3 的绝对值 +3 转换成⼆进制,假设是为int类型(32位)的,那么⼆进制表⽰为:0000 0000 0000 0000 0000 0000 0000 0011
负数转换成⼆进制分为3步:
1、⾸先将负数转换为对应的原码
-3 的原码为(也就是+3转换成⼆进制后的字符串):
0000 0000 0000 0000 0000 0000 0000 0011
2、再将原码的每⼀位做取反操作得到反码。
取反操作:0变为1 、 1变为0;取反后的结果即为:
1111 1111 1111 1111 1111 1111 1111 1100
3、将反码+1得到补码
1111 1111 1111 1111 1111 1111 1111 1101
现在⽤Windows⾃带的计算器来验证⼀下,Win+R 输⼊calc,将计算器改为程序员,选择双字(4字节,32位)
打开Windows⾃带的计算器科学计算功能
在计算器中选择⼗进制,之后输⼊ -3 :
Windows⾃带的计算器科学计算⼗进制下输⼊-3
再点击⼆进制转换,将⼗进制下的-3转换成⼆进制:
转换⼗进制-3为⼆进制
⼆进制转⼗进制负数问题
正常情况下,转换⼆进制到⼗进制都是没有任何问题的。⽽在类似 / 等整数类型中,⼀般 int /integer 都有位数限制,⼀般都是32位长度。也就预⽰着,这些语⾔中,整数是有最⼤值的,⽽32位最⼤整数极限为:2147483647,也就是⼆进制:
01111111111111111111111111111111
那么就很容易理解,32位⼆进制,第⼀位数为0的时候,就表⽰这个是⼀个正数,⽽如果是1,那么就表⽰这个是负数。
32位⼆进制 11111111111111111111111111111001 ⼗进制值是什么?
11111111111111111111111111111001
如上,⼆进制长度为32位,也就是这个整数是⼀个负数,先取反,得到反码:
00000000000000000000000000000110
反码+1,得到:
00000000000000000000000000000111
转换成⼗进制:7
由于是负数,所以加个负号,转换成 -7
趣味:32位⼆进制 1111111111111111111111111111001 ⼗进制值是什么?
这个是个⽐较有趣的,千万不要误导为上⾯这是⼀个负数,其实这个是个整数,因为这⾥只有31位,需要在前⾯加0,补⾜32位,变成:01111111111111111111111111111001
⼗进制负数转⼋进制、⼗六进制
负数转换成⼋进制、⼗六进制,只需在补码(⼆进制)的基础上,3位合成⼀位计算,或者4位合成⼀位计算
-3的转换成⼆进制为:
1111 1111 1111 1111 1111 1111 1111 1101
⼋进制则将-3的⼆进制从右⾄左每3位为⼀个单元,不够三位⽤0补即:
011 111 111 111 111 111 111 111 111 111 101
计算每⼀个单元,结果为:37777777775
⼗六进制则将-3的⼆进制从右⾄左每4位合并为⼀个单元,即:
1111 1111 1111 1111 1111 1111 1111 1101
计算后为: FFFFFFFD
转换⼗进制-3为⼋进制和⼗六进制
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论