进位制
进位制是一种记数方式,利用这种记数法,可以使用有限种数字符号来表示所有的数值。一种进位制中可以使用的数字符号的数目称为这种进位制的基数或底数。若一个进位制的基数为n,即可称之为n进位制,简称n进制。现在最常用的进位制是十进制,这种进位制通常使用10个阿拉伯数字(即0-9)进行记数。
计量单位
- 比特(bit):指二进制中的一位,二进制只有 0 和 1 ,一个 0 或者 1 就是一个比特位
- 字节(byte):8个比特是1个字节,在程序开发中Data通常使用字节表示
- 1 个汉字占据三个字符(char),一个字符是一个字节,一个汉字占三个字节
markdown
* 1KB = 1024B
* 1MB = 2014KB
* 1GB = 1024 MB
* 1TB = 1024GB1
2
3
4
2
3
4
程序中表示进制的方式:
- 二进制 :以
0b或者0B开头是二进制,如0b11101101 - 八进制 :以
0开头的是八进制,如045 - 十进制 : 默认数字是十进制 , 如
23 - 十六进制 : 以
0x开头是十六进制, 如0x21458ad
1~10的使用二进制进行表示:
0b 0000 0001 = 1
0b 0000 0010 = 2
0b 0000 0011 = 3
0b 0000 0100 = 4
0b 0000 0101 = 5
0b 0000 0110 = 6
0b 0000 0111 = 7
0b 0000 1000 = 8
0b 0000 1001 = 9
0b 0000 1010 = 101
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
一个字节是八个二进制位,最高位是0代表正数,是1代表负数
进制转换
- 二进制转十进制:
0b1100 = 0 2的0次方 + 0 2的1次方 + 1 2的2次方 + 1 2的3次方1
- 十进制转二进制
十进制 9 = 8 + 1 = 2的3次方 + 1 = 1000 + 1 = 1001
十进制 67 = 64 + 2 + 1 = 26次方 + 2的一次方 + 1 = 1000000 + 10 + 1 = 10000111
2
2
- N位二进制的最大取值范围
2位二进制的取值范围是0~3 == 2的2次方-1
3位二进制的取值范围是0~7 == 2的3次方-1
n位二进制的取值范围是 2的n次方-11
2
3
2
3
int 类型的取值范围,int 在64位编译器是4个字节,32个二进制位,因为最高位要代表正负,只有31个二进制位可以用,所以int类型的取值范围是
-2的31次方~2的31次方-1
以二进制的形式输出int类型和char类型
方法原理,使用sizeof()方法获取每个类型占多少二进制位,对每个二进制位进行偏移,并 按位与 上 1,就能获取到对应的二进制
c
void printfBinary(int a){
int number = (sizeof(int) * 8) - 1;
while (number >= 0) {
printf("%d",a>>number & 1);
number--;
}
}
// 因为左移<< 3 == *2的三次方
void printfChar(char a){
int number = (sizeof(char)<<3) - 1;
while (number >= 0) {
printf("%d",a>>number & 1);
number--;
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16