计算机中一般分:二进制、八进制、十进制、十六进制。
如何通过代码来互相转换:
void test(){
int a = 10; //系统默认十进制
printf("%d\n",a);
int b = 0b1100; //以0b、0B开头表示二进制
printf("%d\n",b);
int c = 010; //以0开头表示八进制
printf("%d\n",c);
int d = 0xa; //以0x开头表示十六进制
printf("%d\n",d);
}
int main(int argc, const char * argv[]) {
int a = 15;
printf("八进制 = %o\n",a); // 八进制输出的格式符:%o , %O
printf("十进制 = %d\n",a); // 十进制输出的格式符:%d , %i
printf("十六进制 = %x\n",a); // 十六进制的输出格式符 %x 输出的 a ~ f %X 输出 A~F
// 在C语言中没有提供二进制的输出格式符
return 0;
}
int main(int argc, const char * argv[]) {
//如何获得10的二进制
/* 十进制如何转换二进制 除2取余倒序排
商 余数
10/2 5 0
5/2 2 1
2/2 1 0
1/2 0 1
所以10的二进制是1010
*/
int a = 0b1010;
printf("%d\n",a);//验证是否为10
/*
同理,十进制转八进制 除8取余数倒序排
商 余数
10/8 1 2
1/8 0 1
所以10的八进制是12
*/
/*
同理,十进制转十六进制 除16取余数倒序排
商 余数
100/16 6 4
6/16 0 6
所以100的十六进制是64
*/
/*
二进制转换十进制 :每一位乘以对应位上的幂数然后相加
从右向左从0开始数,数到第几位就乘以2几次方然后相加就可以了
0b1010 1 * 2(3) + 0 * 2(2) + 1 * 2(1) + 0 * 2(0) = 10
对应的2的0-10次方 1024 512 256 128 64 32 16 8 4 2 1
*/
/*
二进制转换八进制:一个八进制数就对应着3个二进制数,三个二进制数最大表示7,一个八进制数最大7
0b1,010 = 012
八进制转换二进制:一个八进制位转换为三个二进制位
01,2 = 0b1010
01,2,2 = 0b1010010
*/
printf("%d,%d\n",0122,0b1010010);//验证
/*
二进制转换16进制:一个十六进制位对应4个二进制位,四个二进制的数最大表示15,一个十六进制位最大表示15
四个二进制位为一组转换为一个16进制位
ob1111 = 8 + 4 + 2 + 1 = 15 = f
0b1,0001,0010 = 0x112
16进制转换二进制:一个十六进制位转换为4二进制位
0xabc = 0b1010,1011,1100
*/
printf("%d,%d\n",0xabc,0b101010111100);
/*
八进制转16进制 == 八进制转换为二进制 -》 二进制转换16进制
*/
/*
十进制转16进制:除以16取余倒序排
100 / 16 6 4
6 / 16 0 6
100 = 0x64
16进制转换10进制:每一位乘以对应位上的幂数然后相加
0x64 = 6 * 16 + 4 = 100
*/
printf("%d,%d",100,0x64);
return 0;
}