十六进制,十进制,八进制,二进制转换(含小数部分)

提示:各类进制在实际中表示
十进制:D(Decimal)

二进制:B(Binary)

八进制:O(Octal)  

十六进制:H(Hexadecimal)

如:(4B1)16又可写为4B1H

      (12345)8又可以写为12345O

      (10011)2又可以写为10011B

1、非十进制与十进制的转换
1.1、基本原则:
按权展开法,即把各数位乘权的i次方后相加

1.2、实例:
例1:二进制与十进制的转换,带小数部分

01011010.01B=0×2^7+1×2^6+0×2^5+1×2^4+1×2^3+0×2^2  +1×2^1+0×2^0+0×2^-1+1×2^-2 = 90.25

例2:八进制与十进制的转换,如有小数部分,对应乘相应8的-i次方【字母O,表示八进制】

245O = 3x8^2+4x8^1+5x8^0 = 229

例3:十六进制与十进制的转换,如有小数部分,对应乘相应16的-i次方【字母H,表示十六进制】

F2DH = 15x16^2+2x16^1+13x16^0 = 3885

2、十进制与非十进制的转换
2.1、基本原则:
原则1:整数部分与小数部分分别转换;

原则2:整数部分采用除基数(转换为2进制则每次除2,转换为8进制每次除8,以此类推)取余法,直到商为0,而余数作为转换的结果,第一次除后的余数为最低为,最后一次的余数为最高位;

原则3:小数部分采用乘基数(转换为2进制则每次乘2,转换为8进制每次乘8,以此类推)取整法,直至乘积为整数或达到控制精度。

2.2、实例:
例1:将十进制数725.625分别转换为十六进制、八进制、二进制

转换为二进制,整数部分每次除2,小数部分每次乘以2:


                        整数部分:                                 小数部分:
                2|725…………..余数=1        最低位           0.625                              
                2|362…………..余数=0                           ×       2
                2|181…………..余数=1                              1.250…..整数=1         小数部分最高位,靠近点的那位  
                  2|90……..……余数=0                              0.250
                  2|45…………..余数=1                            ×       2
                  2|22…………..余数=0                            0.500…..整数=0                  
                  2|11…………..余数=1                            ×       2
                    2|5…………..余数=1                            1.000…..整数=1         小数部分最低位,最远点的那位 
                    2|2…………..余数=0                            0.000
                    2|1…………..余数=1        最高位                        >                                    
                       0¨商为0,转换结束                           积为0,转换结束
转换结果为:725.625D=1011010101.101B

3、二进制、八进制、十六进制之间的转换
3.1、基本原则:
原则1:将二进制转换成八进制按3位一组进行;
原则2:将二进制转换成十六进制按4位一组进行;
原则3:分组时如位数不够,整数部分在最左边补0,小数部分在最右边补0;
原则4:八进制转二进制,将1位八进制转换为3位二进制;
原则5:十六进制转二进制,将1位十六进制转换为4位二进制。

3.2、实例:
例1:将1011001.1101011分别转换为八进制,十六进制
1011001.1101011 =  001  011  001.110  101  100  = 131.654O           
1011001.1101011 = 0101  1001.1101  0110  = 59.d6H    

例2:将八进制数3571.402O转换为二进制
3571.402O = 110 011 101 111 001.100 000 010B    

例3:将十六进制数91a28.b71H转换为二进制
 

  • 27
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,我可以为您提供一个简单的 C++ 程序,实现二、八、十、十六进制数之间的相互转换(包小数)。以下是程序代码: ```cpp #include <iostream> #include <string> #include <cmath> using namespace std; // 二进制十进制 int binToDec(string num) { int len = num.length(); int dec = 0; for (int i = 0; i < len; i++) { dec += (num[i] - '0') * pow(2, len - i - 1); } return dec; } // 八十进制 int octToDec(string num) { int len = num.length(); int dec = 0; for (int i = 0; i < len; i++) { dec += (num[i] - '0') * pow(8, len - i - 1); } return dec; } // 十六进制十进制 int hexToDec(string num) { int len = num.length(); int dec = 0; for (int i = 0; i < len; i++) { if (num[i] >= '0' && num[i] <= '9') { dec += (num[i] - '0') * pow(16, len - i - 1); } else if (num[i] >= 'A' && num[i] <= 'F') { dec += (num[i] - 'A' + 10) * pow(16, len - i - 1); } else if (num[i] >= 'a' && num[i] <= 'f') { dec += (num[i] - 'a' + 10) * pow(16, len - i - 1); } } return dec; } // 十进制二进制 string decToBin(int num) { string bin = ""; while (num > 0) { bin = to_string(num % 2) + bin; num /= 2; } return bin; } // 十进制转八 string decToOct(int num) { string oct = ""; while (num > 0) { oct = to_string(num % 8) + oct; num /= 8; } return oct; } // 十进制十六进制 string decToHex(int num) { string hex = ""; while (num > 0) { int tmp = num % 16; if (tmp < 10) { hex = to_string(tmp) + hex; } else { hex = (char)('A' + tmp - 10) + hex; } num /= 16; } return hex; } // 浮点数转换为整数和小数部分 void splitFloat(double num, int& integer, double& fraction) { integer = (int)num; fraction = num - integer; } // 小数部分二进制 string fractionToBin(double fraction) { string bin = ""; int count = 0; while (fraction > 0 && count < 6) { // 最多保留6位小数 fraction *= 2; if (fraction >= 1) { bin += '1'; fraction -= 1; } else { bin += '0'; } count++; } return bin; } int main() { string num; int base; cout << "请输入要转换的数(包小数):" << endl; cin >> num; cout << "请输入要转换的数的(2, 8, 10, 16):" << endl; cin >> base; int integer; double fraction; splitFloat(stod(num), integer, fraction); string result = ""; if (base == 2) { result = decToBin(integer) + "." + fractionToBin(fraction); } else if (base == 8) { result = decToOct(integer) + "." + fractionToBin(fraction); } else if (base == 10) { result = num; } else if (base == 16) { result = decToHex(integer) + "." + fractionToBin(fraction); } cout << "转换结果:" << result << endl; return 0; } ``` 该程序可以接受用户输入一个数(包小数)和该数的(2、8、10 或 16),并将该数转换成另外三种的形式输出。程序还包了将浮点数分成整数和小数部分小数部分二进制等辅助函数。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值