在C语言中除了可以使用十进制外还可以用二进制、八进制和十六进制,各进制之间可互相转换。一个数默认是十进制,不需要特殊表示,但是二进制、八进制和十六进制就不一样了,他们都需要特殊表示。
二进制
二进制是由0和1组成,在C语言中使用二进制必须用0b或者0B开头,后面跟着若干0和1。
int data = 0b00000001; //二进制1,data = 2^0 = 1
int data2 = 0B00000011; //二进制3, data2 = 2^0 + 2^1 = 3
int data3 = 0b00000111; //二进制7, data3 = 1 + 2^1 + 2^2 = 7
int data4 = 0b00010110; //二进制22,data4 = 0 + 2^1 + 2^2 + 0 + 2^4 = 22
那么二进制的数值如何与十进制对应呢?在C语言中int型占用4个字节,从字节的最低位到最高位,第i位为1表示2^(i - 1),否则为0,把所有对应位为1的值相加则是最终十进制的数值。
八进制
八进制的每一位数值范围是0~7,在C语言里数字0开头表示八进制。
int num1 = 011; //八进制9,num1 = 1 * 8^0 + 1 * 8^1 = 9
int num2 = 02; //八进制2, num2 = 2 * 8^0 = 2
int num3 = 0101; //八进制85,num3 = 1 * 8^0 + 0 + 1 * 8^2 = 85
在八进制里,某一位的系数是n,则某一位表示十进制的数值大小是:n * 8^(i - 1),其中i表示八进制里的第i位。最终变量十进制的值则是所有对应位是1的数值相加。
十六进制
十六进制每一位的数值大小是0~15,在C语言里十六进制使用0x或者0X作为开头。十六进制里某位系数大小超过十进制数值9则用A、B、C、D、E、F或者a、b、c、d、e、f表示。A、B、C、D、E、F或者a、b、c、d、e、f分别代表10、11、12、13、14、15。
int m1 = 0x05; //十六进制5, m1 = 5 * 16 ^ 0 = 5
int m2 = 0X21; //十六进制33, m2 = 1 + 2 * 16^1 = 33
在十六进制里某一位的系数是n,则该位表示的十进制数值大小是n * 16^(i - 1),其中i表示十六进制里的第i位。最终变量的十进制值则是所有对应位是1的数值相加。
总结
一个数转换成对应进制后的基数是b(二进制b=2,八进制b=8,十六进制b=16,十进制b=10)有n位数,第i位系数是ai,则对应的十进制数值为a1 * b^(1 - 1) + a2 * b^(2 - 1) + a3 * b^(3 - 1) + ... + ai * b^(i - 1) + ... + an * b^(n - 1)。
完整源代码
#include <stdio.h>
int main()
{
printf("Hello World!\n");
int data = 0b00000001; //二进制1,data = 2^0 = 1
int data2 = 0B00000011; //二进制3, data2 = 2^0 + 2^1 = 3
int data3 = 0b00000111; //二进制7, data3 = 2^0 + 2^1 + 2^2 = 7
int data4 = 0b00010110; //二进制22,data4 = 0 + 2^1 + 2^2 + 0 + 2^4 = 22
int num1 = 011; //八进制9,num1 = 1 * 8^0 + 1 * 8^1 = 9
int num2 = 02; //八进制2, num2 = 2 * 8^0 = 2
int num3 = 0101; //八进制85,num3 = 1 * 8^0 + 0 + 1 * 8^2 = 85
int m1 = 0x05; //十六进制5, m1 = 5 * 16 ^ 0 = 5
int m2 = 0X21; //十六进制33, m2 = 1 + 2 * 16^1 = 33
printf("二进制,data = %d, data2 = %d, data3 = %d, data4 = %d\n", data, data2, data3, data4);
printf("八进制,num1 = %d, num2 = %d, num3 = %d\n", num1, num2, num3);
printf("十六进制,m1 = %d, m2 = %d\n", m1, m2);
return 0;
}
编译运行结果如下:
Hello World!
二进制,data = 1, data2 = 3, data3 = 7, data4 = 22
八进制,num1 = 9, num2 = 2, num3 = 65
十六进制,m1 = 5, m2 = 33
网友评论