9.进制

  • int num = 012;0表示的是八进制
  • int num2 = 0x12;表示的是十六进制
  • 二进制转化成八进制,从右向左,每3个一组,不足3位左补0,转换成八进制
  • 八进制转换为二进制,用3位二进制数代替每一位八进制数

以下代码实现了,十进制到二进制,二进制到十进制,二进制到八进制

  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] = '';
 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
",b_to_eight("11111111111111111111111111111"));
121     std::cout << b_to_eight("1111111111111111") << endl;
122     std::cout << binary_to_ten("11111111111111111111111111111111");
123     system("pause");
124 
125 }
View Code
原文地址:https://www.cnblogs.com/xiaochi/p/8093168.html