1.不同进制数之间的相互转换

我们比较常用的数制有十进制、二进制、八进制和十六进制。二进制就是逢二进一,每位都是小于二的数,其他进制类推。计算机存储数据使用的是二进制编码。

 

对于一个R进制的数X来说,其值可以通过下面的公式算出来:,前面是整数部分,后面是小数部分,m,n为正整数,表示第i位上的数字乘以进制数的i次方。比如二进制数(11.01)2=1×21+1×20+0×2-1+1×2-2=3.25。当R进制转换到十进制时,就这样转换。

 

1.十进制转换为R进制

可以将十进制数连续除以R,其每个余数就是R进制数各个数位上的数字,最后的余数是最高位。比如将68转换成二进制数,用除2取余法:

 2∟68                      余数

 2∟34 …………………0       低位

 2∟17 …………………0

 2∟8   …………………1

 2∟4   …………………0

 2∟2   …………………0

 2∟1   …………………0

  0       …………………1       高位

       结果就是6810 =10001002,将68转换为八进制数就用除8取余法。

 

2. 十进制小数转换成R进制小数

整数部分仍按上述方法转换,小数部分则乘以R,然后将结果的整数位取出作为转换最终结果的一位,再用去掉整数位的小数再乘以R,之后循环这样执行,直到小数部分为0或者达到所要求的精度为止,取出的这些整数位第一位为最高位。例如,将十进制小数0.3125转换成二进制小数: 

        0.3125×2 =0.625       取出0,为最高位

        0.625×2 =1.25           取出1,剩下的小数为0.25

        0.25×2 =0.5               取出0

        0.5×2 =1.0                 取出1,小数位为0,不再继续

       结果就是0.312510 =0.01012 。所以将十进制数68.3125转换成二进制数就是1000100.0101。

 

3.二进制、八进制、十六进制之间的相互转换

每位八进制数相当于三位二进制数,每位十六进制数相当于四位二进制数,如下:

(1000100)2=(1000 100)2=(104)8

(1000100)2=(1000100)2=(44)16

上面这个等式反过来当然也成立,就是八进制十六进制转换为二进制反过来计算就可以了。


计算机数据的存储单位,常用的单位有“位”,“字节”,“字”

字节:由八位二进制数据组成。字节是数据存储中最常用的基本单位。我们常说内存有2G,这里的单位就是字节。1K等于1024字节,1M等于1024K,1G等于1024M。


字:位的组合,作为一个独立的信息单位处理。取决于机器的类型、字长及使用者的要求。常用的固定字长有8位、16位、32位等。


机器字长:讨论信息单位时,有个与机器硬件指标有关的单位就是机器字长,一般指参加运算的寄存器所含有的二进制数的位数,它代表了机器的精度,如32位、64位等。就是我们常说的32位机器还是64位机器。

 

原文地址 http://www.jizhuomi.com/software/21.html

以下是一个实现该功能的 C++ 程序: ```cpp #include <iostream> #include <string> #include <cmath> using namespace std; // 将各进制字符串转换为十进制值 int toDecimal(string numStr, int base) { int decimal = 0; int power = 0; for (int i = numStr.length() - 1; i >= 0; i--) { int digit = 0; if (numStr[i] >= '0' && numStr[i] <= '9') { digit = numStr[i] - '0'; } else if (numStr[i] >= 'a' && numStr[i] <= 'f') { digit = numStr[i] - 'a' + 10; } else if (numStr[i] >= 'A' && numStr[i] <= 'F') { digit = numStr[i] - 'A' + 10; } decimal += digit * pow(base, power); power++; } return decimal; } // 分离十进制值的整和小部分 void separateDecimal(double decimal, int& integerPart, double& decimalPart) { integerPart = (int)decimal; decimalPart = decimal - integerPart; } // 将整部分转换为目标进制的字符串 string toBase(int integerPart, int base) { string baseStr = ""; while (integerPart > 0) { int digit = integerPart % base; if (digit < 10) { baseStr = (char)(digit + '0') + baseStr; } else { baseStr = (char)(digit - 10 + 'a') + baseStr; } integerPart /= base; } if (baseStr == "") { baseStr = "0"; } return baseStr; } // 将小部分转换为目标进制的字符串 string toBase(double decimalPart, int base) { string baseStr = ""; while (decimalPart > 0) { decimalPart *= base; int digit = (int)decimalPart; if (digit < 10) { baseStr += (char)(digit + '0'); } else { baseStr += (char)(digit - 10 + 'a'); } decimalPart -= digit; } if (baseStr == "") { baseStr = "0"; } return baseStr; } // 将各进制字符串转换为目标进制字符串 string convertBase(string numStr, int fromBase, int toBase) { int decimal = toDecimal(numStr, fromBase); int integerPart; double decimalPart; separateDecimal(decimal, integerPart, decimalPart); string integerStr = toBase(integerPart, toBase); string decimalStr = toBase(decimalPart, toBase); return integerStr + "." + decimalStr; } int main() { string numStr; int fromBase, toBase; cout << "请输入要转换:"; cin >> numStr; cout << "请输入该进制:"; cin >> fromBase; cout << "请输入目标进制:"; cin >> toBase; string result = convertBase(numStr, fromBase, toBase); cout << "转换结果为:" << result << endl; return 0; } ``` 该程序实现了将任意进制转换为任意进制的功能。用户输入要转换、该进制以及目标进制,程序将输出转换结果。例如,以下是将二进制 1011.01 转换为十六进制的输出: ``` 请输入要转换:1011.01 请输入该进制:2 请输入目标进制:16 转换结果为:b.d ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值