9.进制
- int num = 012;0表示的是八进制
- int num2 = 0x12;表示的是十六进制
- 二进制转化成八进制,从右向左,每3个一组,不足3位左补0,转换成八进制
- 八进制转换为二进制,用3位二进制数代替每一位八进制数
以下代码实现了,十进制到二进制,二进制到十进制,二进制到八进制
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include <math.h> 4 #include <iostream> 5 #include <limits.h> 6 using namespace std; 7 //此方法不好,因为如果把二进制存放在int类型中最多只能存放八个二进制,可能会造成溢出 8 //int toBinary(int num) 9 //{ 10 // int res = 0; 11 // int mul = 1; 12 // while (num != 0) 13 // { 14 // res += num % 2 * mul; 15 // mul *= 10; 16 // num /= 2; 17 // } 18 // 19 // return res; 20 //} 21 22 //把二进制存放在字符数组中的方法实现十进制转化为二进制 23 char *ten_to_binary(int num) 24 { 25 int len = 1; 26 int temp = num; 27 while (temp / 2 != 0) 28 { 29 len++; 30 temp /= 2; 31 } 32 33 char *res = (char *)malloc(len+1); 34 35 res[len] = '\0'; 36 while (num != 0) 37 { 38 res[--len] = '0' + num % 2; 39 num /= 2; 40 } 41 42 return res; 43 44 } 45 46 //二进制转为十进制 47 long long int binary_to_ten(char *binary) 48 { 49 long long int res = 0; 50 int len = strlen(binary); 51 for (int i = 0; i <len; i++) 52 { 53 res += (binary[i] - '0')*pow(2, len - i - 1); 54 } 55 56 return res; 57 } 58 59 //二进制转为八进制 60 long long int b_to_eight(char *binary) 61 { 62 long long int res = 0; 63 int lastCount;//用于最后三位的次方 64 int len = strlen(binary); 65 66 //如果是三的倍数,则三个三个分组,结果加到res中 67 if (len % 3 == 0) 68 { 69 char temp[4] = { 0 }; 70 int count = len / 3; 71 for (int i = 0; i < count; i++) 72 { 73 temp[0] = binary[len - i * 3 - 3]; 74 temp[1] = binary[len - i * 3 - 2]; 75 temp[2] = binary[len - i * 3 - 1]; 76 res += binary_to_ten(temp)*pow(10, i); 77 } 78 } 79 else//如果不能被3整除,先算可以被3位划分的 80 { 81 char temp[4] = { 0 }; 82 int count = len / 3; 83 for (int i = 0; i < count; i++) 84 { 85 temp[0] = binary[len - i * 3 - 3]; 86 temp[1] = binary[len - i * 3 - 2]; 87 temp[2] = binary[len - i * 3 - 1]; 88 res += binary_to_ten(temp)*pow(10, i); 89 lastCount = i+1; 90 } 91 92 //还剩下多少位,放入temp中,进行计算 93 int left = len % 3; 94 memset(temp, 0, 4); 95 for (int i = 0; i < left; i++) 96 { 97 temp[2 - i] = binary[len - 3 * count - i-1]; 98 } 99 for (int i = 0; i < 3 - left; i++) 100 { 101 temp[i] = '0'; 102 } 103 res += binary_to_ten(temp)*pow(10, lastCount); 104 } 105 106 return res; 107 } 108 109 void main() 110 { 111 int a; 112 _asm 113 { 114 mov eax,19 115 add eax,19 116 mov a,eax 117 } 118 119 //printf("二进制数为:%s", ten_to_binary(78979845)); 120 //printf("八进制数为%d\n",b_to_eight("11111111111111111111111111111")); 121 std::cout << b_to_eight("1111111111111111") << endl; 122 std::cout << binary_to_ten("11111111111111111111111111111111"); 123 system("pause"); 124 125 }