本文目录一览:
c语言:写一个程序完成二进制与十进制,十进制与十六进制之间的转换。
计算机中常用的数的进制主要有:二进制、八进制、十六进制,学习计算机要对其有所了解。2进制,用两个阿拉伯数字:0、1;8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;10进制,用十个阿拉伯数字:0到9;16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。以下简介各种进制之间的转换方法:
一、二进制转换十进制
例:二进制“1101100”
1101100←二进制数
6543210←排位方法
例如二进制换算十进制的算法:
12^6+12^5+02^4+12^3+12^2+02^1+02^0
=64+32+0+8+4+0+0=108
二、二进制换算八进制
例:二进制的“10110111011”换八进制时,从右到左,三位一组,不够补0,即成了:010110111011
然后每组中的3个数分别对应4、2、1的状态,然后将为状态为1的相加,如:
010=2
110=4+2=6
111=4+2+1=7
011=2+1=3
结果为:2673
三、二进制转换十六进制
十六进制换二进制的方法也类似,只要每组4位,分别对应8、4、2、1就行了,如分解为:010110111011
运算为:
0101=4+1=5
1011=8+2+1=11(由于10为A,所以11即B)
1011=8+2+1=11(由于10为A,所以11即B)
结果为:5BB
四、二进制数转换为十进制数
二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……
所以,设有一个二进制数:01100100,转换为10进制为:
计算:02^0+02^1+12^2+02^3+02^4+12^5+12^6+02^7=100
五、八进制数转换为十进制数
八进制就是逢8进1。八进制数采用0~7这八数来表达一个数。八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……
所以,设有一个八进制数:1507,转换为十进制为:
计算:78^0+08^1+58^2+18^3=839
结果是,八进制数1507转换成十进制数为839
六、十六进制转换十进制
例:2AF5换算成10进制直接计算就是:
516^0+F16^1+A16^2+216^3=10997
(别忘了,在上面的计算中,A表示10,而F表示15)
现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。假设有人问你,十进数1234为什么是一千二百三十四?你尽可以给他这么一个算式:
1234=110^3+210^2+310^1+4*10^0
十进制与二进制转换之相互算法
十进制转二进制:用2辗转相除至结果为1将余数和最后的1从下向上倒序写就是结果
例如302
302/2=151余0
151/2=75余1
75/2=37余1
37/2=18余1
18/2=9余0
9/2=4余1
4/2=2余0
2/2=1余0
故二进制为100101110
二进制转十进制从最后一位开始算,依次列为第0、1、2位
第n位的数(0或1)乘以2的n次方得到的结果相加就是答案
例如:01101011.转十进制:
第0位:1乘2^0=1
1乘2^1=2
0乘2^2=0
1乘2^3=8
0乘2^4=0
1乘2^5=32
1乘2^6=64
0乘2^7=0
然后:1+2+0+8+0+32+64+0=107
二进制01101011=十进制107
一、二进制数转换成十进制数
由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数式,然后按十进制加法规则求和。这种做法称为"按权相加"法。
二、十进制数转换为二进制数
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
- 十进制整数转换为二进制整数
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。 - 十进制小数转换为二进制小数
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。 - 二进制与十进制的转换
(1)二进制转十进制方法:"按权求和"
例:(1011.01)2=(1×2^3+0×2^2+1×2^1+1×2^0+0×2^-1+1×2^-2)10=(8+0+2+1+0+0.25)10=(11.25)10
(2)十进制转二进制
- 十进制整数转二进制数:"除以2取余,逆序输出"
例:(89)10=(1011001)2
289
244……1
222……0
211……0
25……1
22……1
21……0
0……1 - 十进制小数转二进制数:"乘以2取整,顺序输出"
例:(0.625)10=(0.101)2
0.625X2
1.25X2
0.5X2
1.0
- 八进制与二进制的转换
例:将八进制的37.416转换成二进制数:
37.416 → 011111.100001110
即:(37.416)8=(11111.10000111)2
例:将二进制的10110.0011转换成八进制:
010110.001100 → 26.14
即:(10110.011)2=(26.14)8 - 十六进制与二进制的转换
例:将十六进制数5DF.9转换成二进制:
5DF.9 → 010111011111.1001
即:(5DF.9)16=(10111011111.1001)2
例:将二进制数1100001.111转换成十六进制:
01100001.1110 → 61.E
即:(1100001.111)2=(61.E)16
二进制数的运算 C语言程序运算
用数组模拟就行。 思路:
- 将输入转化成二进制数,逆序存入数组中。
- 用两数组模拟四则运算,并将运算的结果存入第三个数组中。
- 逆序输出第三个数组。 希望对你有帮助!
c语言二进制数的加减运算
- 二进制加法基本指令
(1)ADD指令
格式:ADD DST,SRC
该指令把源操作数(SRC)指向的数据与目的操作数(DST)相加后,将结果放到目的操作数(DST)中,所执行的操作:(DST) ← (SRC)+(DST)
SRC和DST不能同时为存储器操作数和段寄存器,同时SRC和DST的数据类型要匹配,要同是字节或字。受影响的标志位有:OF,SF,ZF,AF,PF,CF。 (2)ADC指令
格式:ADC DST,SRC
所执行的操作:(DST) ← (SRC)+(DST)+CF 了解清楚进位是怎样加的
该指令把两个操作数(SRC和DST)相加以后,再加上进位标志CF,将结果放到目的操作数(DST)中。受影响的标志位有:OF,SF,ZF,AF,PF,CF。ADC指令多用于多精度数据相加。 - 二进制减法基本指令
(1)SUB指令
格式:SUB DST,SRC
所执行的操作:(DST) ← (DST)-(SRC)
该指令把源操作数(SRC)指向的数据与目的操作数(DST)相减后,将结果放到目的操作数(DST)中,SRC和DST不能同时为存储器操作数和段寄存器(,同时SRC和DST的数据类型要匹配,要同是字节或字。受影响的标志位有:OF,SF,ZF,AF,PF,CF。 (2)SBB指令
格式:SBB DST,SRC
(DST) ← (DST)-(SRC)-CF 了解清楚进位是怎样减的
该指令把两个操作数(SRC和DST)相减以后,再减去CF,将结果放到目的操作数(DST)中。受影响的标志位有:OF,SF,ZF,AF,PF,CF。SBB指令多用于多精度数据相加。
怎么使用C语言实现用用二进制码与数据求与,或,异或运算
- 想让一个变量等于0000..01直接给赋值1就可以。想让它等于11111..1直接赋值-1就可以,也可以赋值~(0)。
- 不用非要与1111..1求与,如果1那一位移出的话直接就变成0了。
- 如果不是为了练习的话,检测本地系统的数据长度直接用关键字sizeof就可以,不用写程序。