电脑程序进制公式? 愿知道的友友说下?
答案:1 悬赏:80 手机版
解决时间 2021-04-25 01:52
- 提问者网友:疯子也有疯子的情调
- 2021-04-24 11:26
电脑程序进制公式? 愿知道的友友说下?
最佳答案
- 五星知识达人网友:老鼠爱大米
- 2021-04-24 12:31
在高速发展的现代社会,计算机浩浩荡荡地成为了人们生活中不可缺少的一部分,帮助人们解决通信,联络,互动等各方面的问题。今天我就给大家讲讲与计算机有关的“进制转换”问题。
我们以(25.625)(十)为例讲解一下进制之间的转化问题
说明:小数部份的转化计算机二级是不考的,有兴趣的人可以看一看
1. 十 -----> 二
(25.625)(十)
整数部分:
25/2=12......1
12/2=6 ......0
6/2=3 ......0
3/2=1 ......1
1/2=0 ......1
然后我们将余数按从下往上的顺序书写就是:11001,那么这个11001就是十进制25的二进制形式
小数部分:
0.625*2=1.25
0.25 *2=0.5
0.5 *2=1.0
然后我们将整数部分按从上往下的顺序书写就是:101,那么这个101就是十进制0.625的二进制形式
所以:(25.625)(十)=(11001.101)(二)
2. 二 ----> 十
(11001.101)(二)
整数部分: 下面的出现的2(x)表示的是2的x次方的意思
1*2(4)+1*2(3)+0*2(2)+0*2(1)+1*2(0)=25
小数部分:
1*2(-1)+0*2(-2)+1*2(-3)=0.625
所以:(11001.101)(二)=(25.625)(十)
3. 十 ----> 八
(25.625)(十)
整数部分:
25/8=3......1
3/8 =0......3
然后我们将余数按从下往上的顺序书写就是:31,那么这个31就是十进制25的八进制形式
小数部分:
0.625*8=5
然后我们将整数部分按从上往下的顺序书写就是:5,那么这个5就是十进制0.625的八进制形式
所以:(25.625)(十)=(31.5)(八)
4. 八 ----> 十
(31.5)(八)
整数部分:
3*8(1)+1*8(0)=25
小数部分:
5*8(-1)=0.625
所以(31.5)(八)=(25.625)(十)
5. 十 ----> 十六
(25.625)(十)
整数部分:
25/16=1......9
1/16 =0......1
然后我们将余数按从下往上的顺序书写就是:19,那么这个19就是十进制25的十六进制形式
小数部分:
0.625*16=10(即十六进制的A或a)
然后我们将整数部分按从上往下的顺序书写就是:A,那么这个A就是十进制0.625的十六进制形式
所以:(25.625)(十)=(19.A)(十六)
6. 十六----> 十
(19.A)(十六)
整数部分:
1*16(1)+9*16(0)=25
小数部分:
10*16(-1)=0.625
所以(19.A)(十六)=(25.625)(十)
如何将带小数的二进制与八进制、十六进制数之间的转化问题
我们以(11001.101)(二)为例讲解一下进制之间的转化问题
说明:小数部份的转化计算机二级是不考的,有兴趣的人可以看一看
1. 二 ----> 八
(11001.101)(二)
整数部分: 从后往前每三位一组,缺位处用0填补,然后按十进制方法进行转化, 则有:
001=1
011=3
然后我们将结果按从下往上的顺序书写就是:31,那么这个31就是二进制11001的八进制形式
小数部分: 从前往后每三位一组,缺位处用0填补,然后按十进制方法进行转化, 则有:
101=5
然后我们将结果部分按从上往下的顺序书写就是:5,那么这个5就是二进制0.101的八进制形式
所以:(11001.101)(二)=(31.5)(八)
2. 八 ----> 二
(31.5)(八)
整数部分:从后往前每一位按十进制转化方式转化为三位二进制数,缺位处用0补充 则有:
1---->1---->001
3---->11
然后我们将结果按从下往上的顺序书写就是:11001,那么这个11001就是八进制31的二进制形式
说明,关于十进制的转化方式我这里就不再说了,上一篇文章我已经讲解了!
小数部分:从前往后每一位按十进制转化方式转化为三位二进制数,缺位处用0补充 则有:
5---->101
然后我们将结果按从下往上的顺序书写就是:101,那么这个101就是八进制5的二进制形式
所以:(31.5)(八)=(11001.101)(二)
3. 十六 ----> 二
(19.A)(十六)
整数部分:从后往前每位按十进制转换成四位二进制数,缺位处用0补充 则有:
9---->1001
1---->0001(相当于1)
则结果为00011001或者11001
小数部分:从前往后每位按十进制转换成四位二进制数,缺位处用0补充 则有:
A(即10)---->1010
所以:(19.A)(十六)=(11001.1010)(二)=(11001.101)(二)
4. 二 ----> 十六
(11001.101)(二)
整数部分:从后往前每四位按十进制转化方式转化为一位数,缺位处用0补充 则有:
1001---->9
0001---->1
则结果为19
小数部分:从前往后每四位按十进制转化方式转化为一位数,缺位处用0补充 则有:
1010---->10---->A
则结果为A
所以:(11001.101)(二)=(19.A)(十六)
最近有些朋友提了这样的问题“0.8的十六进制是多少?”
我想在我的空间里已经有了详细的讲解,为什么他还要问这样的问题那
于是我就动手算了一下,发现0.8、0.6、0.2... ...一些数字在进制之间的转化
过程中确实存在麻烦。
就比如“0.8的十六进制”吧!
无论你怎么乘以16,它的余数总也乘不尽,总是余8
这可怎么办啊,我也没辙了
第二天,我请教了我的老师才知道,原来这么简单啊!
具体方法如下:
0.8*16=12.8
0.8*16=12.8
.
.
.
.
.
取每一个结果的整数部分为12既十六进制的C
如果题中要求精确到小数点后3位那结果就是0.CCC
如果题中要求精确到小数点后4位那结果就是0.CCCC
现在OK了,我想我的朋友再也不会因为进制的问题烦愁了!
下面是将十进制数转换为负R进制的公式:
N=(dmdm-1...d1d0)-R
=dm*(-R)^m+dm-1*(-R)^m-1+...+d1*(-R)^1+d0*(-R)^0
15=1*(-2)^4+0*(-2)^3+0*(-2)^2+1*(-2)^1+1*(-2)^0
=10011(-2)
其实转化成任意进制都是一样的
C程序代码:(支持负进制)
#include <stdio.h>
#include <math.h>
main()
{
long n,m,r;
while( scanf( "%ld%ld",&n,&r)!=EOF){
if (abs(r)> 1 && !(n <0 && r> 0)){
long result[100]=;
long *p=result;
printf( "%ld=",n);
if (n!=0){
while(n!=0){
m=n/r;*p=n-m*r;
if (*p <0 && r <0){
*p=*p+abs(r);m++;
}
p++;n=m;
}
for (m=p-result-1;m>=0;m--){
if (result[m]> 9)
printf( "%c",55+result[m]);
else
printf( "%d",result[m]);
}
}
else printf( "0");
printf( "(base%d)\n",r);
} }
return;
}
我们以(25.625)(十)为例讲解一下进制之间的转化问题
说明:小数部份的转化计算机二级是不考的,有兴趣的人可以看一看
1. 十 -----> 二
(25.625)(十)
整数部分:
25/2=12......1
12/2=6 ......0
6/2=3 ......0
3/2=1 ......1
1/2=0 ......1
然后我们将余数按从下往上的顺序书写就是:11001,那么这个11001就是十进制25的二进制形式
小数部分:
0.625*2=1.25
0.25 *2=0.5
0.5 *2=1.0
然后我们将整数部分按从上往下的顺序书写就是:101,那么这个101就是十进制0.625的二进制形式
所以:(25.625)(十)=(11001.101)(二)
2. 二 ----> 十
(11001.101)(二)
整数部分: 下面的出现的2(x)表示的是2的x次方的意思
1*2(4)+1*2(3)+0*2(2)+0*2(1)+1*2(0)=25
小数部分:
1*2(-1)+0*2(-2)+1*2(-3)=0.625
所以:(11001.101)(二)=(25.625)(十)
3. 十 ----> 八
(25.625)(十)
整数部分:
25/8=3......1
3/8 =0......3
然后我们将余数按从下往上的顺序书写就是:31,那么这个31就是十进制25的八进制形式
小数部分:
0.625*8=5
然后我们将整数部分按从上往下的顺序书写就是:5,那么这个5就是十进制0.625的八进制形式
所以:(25.625)(十)=(31.5)(八)
4. 八 ----> 十
(31.5)(八)
整数部分:
3*8(1)+1*8(0)=25
小数部分:
5*8(-1)=0.625
所以(31.5)(八)=(25.625)(十)
5. 十 ----> 十六
(25.625)(十)
整数部分:
25/16=1......9
1/16 =0......1
然后我们将余数按从下往上的顺序书写就是:19,那么这个19就是十进制25的十六进制形式
小数部分:
0.625*16=10(即十六进制的A或a)
然后我们将整数部分按从上往下的顺序书写就是:A,那么这个A就是十进制0.625的十六进制形式
所以:(25.625)(十)=(19.A)(十六)
6. 十六----> 十
(19.A)(十六)
整数部分:
1*16(1)+9*16(0)=25
小数部分:
10*16(-1)=0.625
所以(19.A)(十六)=(25.625)(十)
如何将带小数的二进制与八进制、十六进制数之间的转化问题
我们以(11001.101)(二)为例讲解一下进制之间的转化问题
说明:小数部份的转化计算机二级是不考的,有兴趣的人可以看一看
1. 二 ----> 八
(11001.101)(二)
整数部分: 从后往前每三位一组,缺位处用0填补,然后按十进制方法进行转化, 则有:
001=1
011=3
然后我们将结果按从下往上的顺序书写就是:31,那么这个31就是二进制11001的八进制形式
小数部分: 从前往后每三位一组,缺位处用0填补,然后按十进制方法进行转化, 则有:
101=5
然后我们将结果部分按从上往下的顺序书写就是:5,那么这个5就是二进制0.101的八进制形式
所以:(11001.101)(二)=(31.5)(八)
2. 八 ----> 二
(31.5)(八)
整数部分:从后往前每一位按十进制转化方式转化为三位二进制数,缺位处用0补充 则有:
1---->1---->001
3---->11
然后我们将结果按从下往上的顺序书写就是:11001,那么这个11001就是八进制31的二进制形式
说明,关于十进制的转化方式我这里就不再说了,上一篇文章我已经讲解了!
小数部分:从前往后每一位按十进制转化方式转化为三位二进制数,缺位处用0补充 则有:
5---->101
然后我们将结果按从下往上的顺序书写就是:101,那么这个101就是八进制5的二进制形式
所以:(31.5)(八)=(11001.101)(二)
3. 十六 ----> 二
(19.A)(十六)
整数部分:从后往前每位按十进制转换成四位二进制数,缺位处用0补充 则有:
9---->1001
1---->0001(相当于1)
则结果为00011001或者11001
小数部分:从前往后每位按十进制转换成四位二进制数,缺位处用0补充 则有:
A(即10)---->1010
所以:(19.A)(十六)=(11001.1010)(二)=(11001.101)(二)
4. 二 ----> 十六
(11001.101)(二)
整数部分:从后往前每四位按十进制转化方式转化为一位数,缺位处用0补充 则有:
1001---->9
0001---->1
则结果为19
小数部分:从前往后每四位按十进制转化方式转化为一位数,缺位处用0补充 则有:
1010---->10---->A
则结果为A
所以:(11001.101)(二)=(19.A)(十六)
最近有些朋友提了这样的问题“0.8的十六进制是多少?”
我想在我的空间里已经有了详细的讲解,为什么他还要问这样的问题那
于是我就动手算了一下,发现0.8、0.6、0.2... ...一些数字在进制之间的转化
过程中确实存在麻烦。
就比如“0.8的十六进制”吧!
无论你怎么乘以16,它的余数总也乘不尽,总是余8
这可怎么办啊,我也没辙了
第二天,我请教了我的老师才知道,原来这么简单啊!
具体方法如下:
0.8*16=12.8
0.8*16=12.8
.
.
.
.
.
取每一个结果的整数部分为12既十六进制的C
如果题中要求精确到小数点后3位那结果就是0.CCC
如果题中要求精确到小数点后4位那结果就是0.CCCC
现在OK了,我想我的朋友再也不会因为进制的问题烦愁了!
下面是将十进制数转换为负R进制的公式:
N=(dmdm-1...d1d0)-R
=dm*(-R)^m+dm-1*(-R)^m-1+...+d1*(-R)^1+d0*(-R)^0
15=1*(-2)^4+0*(-2)^3+0*(-2)^2+1*(-2)^1+1*(-2)^0
=10011(-2)
其实转化成任意进制都是一样的
C程序代码:(支持负进制)
#include <stdio.h>
#include <math.h>
main()
{
long n,m,r;
while( scanf( "%ld%ld",&n,&r)!=EOF){
if (abs(r)> 1 && !(n <0 && r> 0)){
long result[100]=;
long *p=result;
printf( "%ld=",n);
if (n!=0){
while(n!=0){
m=n/r;*p=n-m*r;
if (*p <0 && r <0){
*p=*p+abs(r);m++;
}
p++;n=m;
}
for (m=p-result-1;m>=0;m--){
if (result[m]> 9)
printf( "%c",55+result[m]);
else
printf( "%d",result[m]);
}
}
else printf( "0");
printf( "(base%d)\n",r);
} }
return;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯