转
四进制
的时候,先以
二进制
为中介,
因为
8
=
2^3,
所以一位8进制数码刚好可以转化为3位2进制。
(1532)8
=
(001
101
011
010)2
然后
4
= 2^2, 所以每两位2进制转一位4
进制
,
(001
101
011
010)2
=
(031122)4
所以
(1532)8
=
(31122)
4
注意
整数转化
都是从后面往前面数
。
第二题简单一些,
直接转化。
(1532)8
=
(001
101
011
010)2
=
(1101011010)2
楼主注意到各进制之间的进位就好了
二进制数字通信系统转换成四进制,数据的码数单元肯定发生变化,原来由数据位包含的信息已经发生变化 ,原来的2个位信息,合成一个位。
误码率,误信率和系统传输有关,这个大小看系统。
如果四进制错一位,相当于二进制错两个字位了。
参考更多数制转换,进制转换就可。
数的位权概念 :一个二进制数110,其中高位的1表示1个22,即4,低位的1表示1个21,即2,最低位的0表示0个20,即0。
可见,在数制中,各位数字所表示值的大小不仅与该数字本身的大小有关,还与该数字所在的位置有关,我们称这关系为数的位权。 二进制数的位权是以2为底的幂
所以110按照权展开就是110=221+211+200
二进制(Binary)——>八进制(Octal)
例子1:将二进制数(10010)2转化成八进制数。
(10010)2=(010 010)2=(2 2)8=(22)8
例子2:将二进制数(01010)2转化为八进制数。
(010101)2=(0 101 010)2=(0 5 2)8=(052)8
诀窍:因为每三位二进制数对应一位八进制数,所以,以小数点为界,整数位则将二进制数从右向左每3位一隔开,不足3位的在左边用0填补即可;小数位则将二进制数从左向右每3位一隔开,不足3位的在右边用0填补即可。
假设有二进制数10110,那么转化为十进制数为:12^4+02^3+12^2+12^1+02^0
假设有三进制数2101,那么转化为十进制数为:
23^3+13^2+03^1+13^0
四进制也同理。
把十进制转化为二进制,用除法求余,其他进制的转化同理。先将十进制转换成2进制,再由2进制转换成4、8、16进制
存放转换后的2、4、8、16进制的数组为字符串,方便显示。
数制之间的转换,十进制先转换为2进制,输入十进制到int型变量x中,一直进行x/2并取模x%2直到x=0,放到数组a[]中,代码实现为
while(x!=0)
{
a[i++]=x%2;
x=x/2;
}
数组a[]便是x的2进制的倒序,将a[]倒序并转换为字符放到b[]中,代码实现
for(j=0;j<i;j++)
b[j]=a[i-j-1]+48;
b[i]=0;
其中+48是将整型数转换为字符型
其次就要将2进制转换成4、8、16进制,从低位算起,所以用数组a[]来计算
2进制转4进制,用两位比特(0或1)2进制转换成4进制,如10=12+0=2,11=12+1=3,代码实现
for(k=i/2+rem(i,2),j=0;j<i;j+=2)
c[--k]=a[j]+a[j+1]2+48;
c[i/2+rem(i,2)]=0;
其中c[i/2+rem(i,2)]=0;语句是赋值给字符串结束符,rem是调用我自己写的函数,原型为
int rem(int a,int b)
{
if(a%b==0)return 0;
else return 1;
}
作用是计算二进制的位数是否是2的倍数,是则返回0,否则返回1
2进制转8进制,用三位比特转换,如101=14+02+1=5,110=14+12+0=6,代码实现
for(k=i/3+rem(i,3),j=0;j<i;j+=3)
d[--k]=a[j]+a[j+1]2+a[j+2]4+48;
d[i/3+rem(i,3)]=0;
2进制转换为16进制,1101=18+14+02+1=13,即16进制的D,
取str[]="0123456789ABCDEF",16进制的值即为str字符串的下标,如str[13]=D,将1101最终转换为D,代码实现为
for(k=i/4+rem(i,4),j=0;j<i;j+=4)
e[--k]=str[a[j]+a[j+1]2+a[j+2]4+a[j+3]8];
e[i/4+rem(i,4)]=0;
————————————————————————————
全部代码:
#include<iostreamh>
int rem(int a,int b)
{
if(a%b==0)return 0;
else return 1;
}
void main()
{
int i=0,j,k,x,a[50];
char b[50],c[20],d[20],e[20],str[]="0123456789ABCDEF";
cout<<"整数:"<<flush;
cin>>x;
for(j=0;j<50;j++)
a[j]=0;
while(x!=0)
{
a[i++]=x%2;
x=x/2;
}
for(j=0;j<i;j++)
b[j]=a[i-j-1]+48;
b[i]=0;
for(k=i/2+rem(i,2),j=0;j<i;j+=2)
c[--k]=a[j]+a[j+1]2+48;
c[i/2+rem(i,2)]=0;
for(k=i/3+rem(i,3),j=0;j<i;j+=3)
d[--k]=a[j]+a[j+1]2+a[j+2]4+48;
d[i/3+rem(i,3)]=0;
for(k=i/4+rem(i,4),j=0;j<i;j+=4)
e[--k]=str[a[j]+a[j+1]2+a[j+2]4+a[j+3]8];
e[i/4+rem(i,4)]=0;
cout<<"二进制:"<<b<<endl;
cout<<"四进制:"<<c<<endl;
cout<<"八进制:"<<d<<endl;
cout<<"十六进制:"<<e<<endl;
}
——————————————————————————
编译通过,运行成功,请采纳!
十进制数字怎样转化成四进制, 用 “除4取余数” 法
例如: 十进制123转化成四进制
123 / 4 商 30 余 3
30 / 4 商 7 余 2
7 / 4 商 1 余 3
1 / 4 商 0 余 1
四进制为: 1323
验算: 14^3+34^2+24^1+3 = 64+48+8+3 = 123
扩展资料:
进制转换
四进制转二进制的方法:
从低位到高位把四进制的每1位转换成2位二进制数由于2的2次方等于4,四进制和二进制之间的转化是二次方的关系,所以可以把四进制数的每1位换成二进制的二位。例如:把四进制的1230转换成二进制1230=01 10 11 00
十进制转四进制的方法:
十进制数除4取余法,即十进制数除4,余数为权位上的数,得到的商值继续除4,依此步骤继续向下运算直到商为0为止。
间接法—把十进制转成二进制,然后再由二进制转成四进制。
四进制转十进制的方法:
把二进制数按权展开、相加即得十进制数。
参考资料来源:百度百科-四进制
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)