1.本文详细介绍了二进制,八进制,八进制和他们之间的相互转换
2.也详细介绍了原码,反码,补码以及它们之间的相互转换,让你更加了解计算机数据的底层运行逻辑
目录
一:认识各种进制数
1.十进制数
一般我们平时日常中说的12,55等一系列数字就是十进制数,这些数字的基本特征就是满10进1,且每位都以0-9表示。
那么在计算机的世界我们常用的进制数有三种,分别是二进制数,八进制数以及十六进制数
2.二进制数
二进制数是计算机唯一能处理的数,任何数据传入计算机中都会先被转换成二进制数,然后再被计算机处理
二进制数特征与十进制数大同小异:二级制数每位都只能是0或1,逢2进1
例如:01+01==10(末位1+1=2,向前进1位得到10)
二进制数的符号:B或者 在右下角标明2
如果一个数为11011B,则表明该数为二进制数
3.八进制数
八进制数:顾名思义八进制数的每一位只能用0-7来表示,逢8进1,
符号:O或者 在右下角标明8
例如:O45+O23==O70(末位5+3==8,则进1,结果为70(O表示该数为八进制数))
4.十六进制数
十六进制数有其特有的特点,它也是逢16进1,但是它的每一位的表示数据不同,
它的每一位表示数据为0-9,但遇到两位数的时候则用ABCDEF来分别表示10,11,12,13,14,15。
符号:Ox或者 在右下角标明16
例如:Ox3F(则表示末位为15,前一位为3的十六进制数)
逢16进1:运算时大于F(15)则进1
由于十六进制数表示的数足够大,一般在编译器中用来表示数据在计算机中存储的地址
二:各种进制数的相互转换
1.二进制数与十进制数之间的转换
-
二进制转换为十进制
方法:一般为按位权展开方程式之和
就是从低位到高位计算,每一位的数据(权)乘与2的相应次方(从2^0次方开始),然后在把他们的每一项结果加起来
例如:B(11010010)
转换为十进制:0*2^0 + 1*2^1 + 0*2^2 + 0*2^3 + 1*2^4 + 0*2^5 + 1*2^6 +1*2^7==210
*表示 乘
-
十进制转换为二进制
方法:1.除二倒取余数法 2.直接高位到低位计算
1.除二倒取余数法
用要转换的十进制数一直除于2,直到余数为0结束
例:34—>100010
2.直接按高位到低位计算
该方法适用于比较熟练的时候使用
例子:34—100010
我们知道二进制每位对应的十进制为2^n,那么34在32到64之间,是满足32这个数的
所以34第6位上是1(32的是2的5次方,在第六位上),那么还剩下2没处理,那么二进制上第2位上为1(2正好为2的一次方上所以在第二位上),所以第5位,第4位,第3位,都为0;
当2在第二位上正好处理完了,所以第一位上也为0;
结果:100010
2.二进制数与八进制数之间的转换
-
八进制转换为二进制
方法:一位转三位
把八进制的每一位转换位3位二进制,你如八进制某一位上是6,转为二进制就为110
(把八进制的每一位当成十进制,再转成二进制)
例子:O(56)
5->101 6->110
结果:101110B
-
二进制转换为八进制
方法:三位转一位
就是八进制转二进制的逆运算
比如二进制101,转为八进制就为5
(注意怕位数不对称所以从后往前转换,不够三位的补0;
例子:1110110011B
011:3 110:6 110:6 1(不够3为前面补0)->001:1
结果:O(1661)
3.二进制数与十六进制数之间的转换
-
二进制转换为十六进制
方法:四位转一位(与二进制转八进制相同)
从低位向高位依次取4位转换为十六进制(不够向前补0)
注意:十六进制的10-15是用A-F表示
例子:10011010001B
0001:1 1101(13):D 100(不够4位补0)->0100:4
结果:Ox4D1
-
十六进制转换为二进制
方法:一位转四位(与八进制转二进制方法相同)
把十六进制数的每一位当成十进制分别转换为对应的二进制数
例子:OxFA5
F(15):1111 A(10):1010 5:0101
结果:111110100101B
三:介绍原码,反码,补码
1.原反补码的价值(存在的意义)
首先我们知道数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,
数值存在的本质就是为了运算,且最本质的计算为加减法;为了使用运算更加的全面,且能使负数与正数能一起计算,且为了使机器只需要运算加法也能达到减法的效果(能使运算速度更快),就诞生数值的原码,反码以及补码(需要详细了解可以去看《计算机组成原理》一书)
注:我们输入到计算机中的都是数值的原码,但是在计算机中被处理的是数值的补码
(计算机会自动把原码转换为补码再进行处理)
2.计算机中分别是怎么表示正负数的
数字数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为(-127~-0 +0~127)共256个.
例如:-1:原码为:(符号位'负数')1 000000000000000……00000001 (用最高位表示符号位,其他位为正常二进制)
1 :原码为:(符号位’正数‘)0 000000000000……00000001
3.原码,反码,补码的转换
-
原码,反码,补码转换(正数)
重点:正数的原反补码相同,
原码就是数值所对应的二进制数
例如:整数:1
原码:(符号位)0 0000000……00000001
反码:(符号位)0 0000000……00000001
补码:(符号位)0 0000000……00000001
计算机底层运算过程
例子:整数:1+1
(底层运算的是补码,如下列)
0 0000000……00000001
+ 0 0000000……00000001
= 0 0000000……00000010=>再转换为原码进行输出(一样)
结果:2
-
原码,反码,补码转换(负数)
重点:负数与整数不同,需要把原码先转换为反码,再把反码转换为补码
原码:为数值转换的二进制数
反码:符号位除外,其他位取反
补码:反码+1
例如:-1 原码为:(符号位)1 000000000……00000001
反码为:(符号位)1 1111111111……111111110
补码为:(符号位)1 1111111111……111111111
底层运算过程:
例子:2-1 实际上计算机会将其转换为加法:2+(-1)
2 为正数:原反补相同:00000000……00000010
-1为负数:原码: 10000000……00000001
反码: 111111111……111111110
补码: 111111111……111111111
计算:补码与补码计算:
00000000……00000010(32位)
+ 111111111……111111111(32位)
= 100000000……00000001(33位)
由于(int)整数最多只能有32位,所以低位开始,向前32位算有效数据
结果补码:00000000……00000001 符号位为0,说明是正数
正数原反补相等,所以结果为1;
结语:这些就是本期介绍的全部内容了
制作不易:各位看官老爷点赞加关注支持一下吧!万分感谢!!!