进制基本概念
什么是进制?
进制是一种计数的方式,数值的表示形式
常见的进制
十进制、二进制、八进制、十六进制
进制书写的格式和规律
十进制 0、1、2、3、4、5、6、7、8、9 逢十进一
二进制 0、1 逢二进一
在C语言中, 如果想用二进制表示某个数, 前面需要加上0b;
八进制 0、1、2、3、4、5、6、7 逢八进一
在C语言中, 如果想用八进制表示某个数, 前面需要加上0;
十六进制 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F 逢十六进一
在C语言中, 如果想用十六进制表示某个数, 前面需要加上0x;
注意点:
%i %d代表以十进制输出整数
0x 和 0X写法 一样, 0b和0B写法也一样
// 12的不同进制的表达
// 用十进制来表示
int num1 = 12;
printf("num1 = %i\n", num1);
// 用十六进制来表示
int num2 = = 0xc;
printf("num2 = %i\n", num2);
// 用八进制来表示
int num3 = 014;
printf("num3 = %i\n", num3);
// 用二进制来表示
int num4 = 0b1100;
printf("num4 = %i\n", num4);
// 不同进制的输出
int num = 12;
// 以十进制输出
printf("%i\n", num);
// 以八进制输出
printf("%o\n", num);
// 以十六进制输出
printf("%x\n", num);
//二进制
void printBinary(char value){
}
进制转换
十进制转二进制
除2取余, 余数倒序; 得到的序列就是二进制表示形式
/*
* 求12的二进制数
* 12
* 2
* ----
* 6 0
* 2
* ----
* 3 0
* 2
* ----
* 1 1
* 2
* ----
* 0 1
*
* 12 --> 1100
*/
二进制转十进制
规则: 系数 * 基数^(索引)
系数:就是每一位对应的值就是系数;
基数: 如果是二进制转到十进制,那么2就是基数
-如果是从八进制转换到十进制, 那么八就是基数
索引:从最低位以0开始,依次递增;
/*
1*2^3 + 1*2^2 + 0*2^1 + 0*2^0
1 1 0 0
==> 8 + 4 + 0 + 0 = 12
*/
/*
* 二进制快速转换十进制
* 64 32 16 8 4 2 1
* 1 1 1 1 1 1 1
*/
十进制转换八进制
规则: 除8取余,余数倒数
/* 十进制24转换为八进制
*
* 24
* 8
* ---
* 3 0
* 8
* ---
* 0 3
*
* 24 --> 30
*/
二进制转换为八进制
必须知道:在八进制中最大的数字是7
1.可以使用系数 * 基数^(索引) 将二进制转换为8进制
2.二进制在转换为8进制的时候,把三个二进制数看做一个八进制位即可
/*从右至左每3位划分为8进制的1位, 不够前面补0
001 100 100
第0位: 100 等于十进制 4
第1位: 100 等于十进制 4
第2位: 001 等于十进制 1
最终结果: 144就是转换为8进制的值
/*
二进制转换为十六进制
二进制在转换为十六进制的时候,把四个二进制位看做一个十六进制为即可
/*
3 8
0011 1000 ==> 0x38
*/
十进制小数转换为二进制小数
整数部分,直接转换为二进制即可
小数部分,使用"乘2取整,顺序排列"
用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,直到积中的小数部分为零,或者达到所要求的精度为止
然后把取出的整数部分按顺序排列起来, 即是小数部分二进制
最后将整数部分的二进制和小数部分的二进制合并起来, 即是一个二进制小数
例如: 将12.125转换为二进制
// 整数部分(除2取余)
12
/ 2
------
6 // 余0
/ 2
------
3 // 余0
/ 2
------
1 // 余1
/ 2
------
0 // 余1
//12 --> 1100
// 小数部分(乘2取整数积)