目录
二进制
进制分类
进制表示形式
进制转换
原码 反码 补码
数据类型
数据类型转化
5 二进制
5.1 进制分类
5.2 不同进制表示形式
1 2 3
| 十进制: 就是十进制(无特殊) 二进制: 0b010101 十六进制: 0x 0X #0x #0X
|
5.3 进制之间的转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| 二进制转十进制 方式: 从低位开始,提取每一位的数据,乘以2的(位数-1)次方, 结果相加 0111 二进制 0 1 1 1 1*2^(1-1)=1 1*2^(2-1)=2 1*2^(3-1)=4 0*2^(3-1)=0 1+2+4+0=7
十进制转二进制 方式: 使用该数不断的除以2,直到商为零结束, 最后把每一步计算的余数倒叙组合就是二进制 10十进制 转为二进制 10%2=5 余 0 5%2=2 余 1 2%2=1 余 0 1%2=0 余 1 1010
十六进制转为十进制 方式: 从低位开始,提取每一位的数据,乘以16的(位数-1)次方, 结果相加 #0x12A (A)10*16^0=10 (2)2* 16^1=32 (1)1*16^2=256 256+32+10=298 十进制转为十六进制 方式: 使用该数不断的除以16,直到商为零结束, 最后把每一步计算的余数倒叙组合就是二进制 33(十进制) 33%16=2 余 1 2%16=0 余 2 十六进制的结果: 21 二进制转为十六进制 方式: 把二进制每4位一组,计算十六进制 1001 1100 9(十进制) 12(十进制) 十六进制结果: 9C 十六进制转为二进制 方式: 把每一位转成4位一组的二进制 9C (C)12=8+4 二进制表示: 1010 (9) 9=8+1 二进制表示: 1001 二进制结果: 10011010
|
5.4 原码 反码 补码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 机器数: 就是二进制数据 形式值:没有符号位 1111 最高位不是符号位 真值: 有符号位 1111( 最高位是符号位)
原码: 真值 反码: 正数的反码就是原码 负数的反码符号位不变其余取反 1111---> 1000 补码: 正数的补码就是原码 负数的补码就是反码+1,符号位不变 总结:1.正数的 原码 反码 补码 一致 2.计算中存储的数据都是以补码形式存在
|
5.5 数据类型
| 整型 |
浮点型 |
布尔类型 |
| char 1字节 |
float 4字节 |
宏定义(自定义布尔类): #define BOOL int |
| short 2字节 |
double 8字节 |
使用c99标准中:Bool |
| int 4字节 |
long double 16字节 |
使用c99标准: 导入头文件
<stdbool.h> |
| long (32:4字节 64:8字节) —> 现在的笔记本是使用了32位系统的转化方式(4字节) |
|
|
| long long 8字节 |
|
|
5.6 数据类型转化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 自动类型转换: 窄类型转为宽类型 1.运算过程中的自动类型转换(隐式转换) 比如: int a=1;short b=2 计算: a+b 结果是int类型
2.赋值过程中的自动类型转换(隐式转换) 比如: float f=3.14; 自动把double类型转为了float类型
3.强制类型转化 宽类型转为窄类型 案例: //计算三个人的平均年龄 int age1=20,age2=23,age3=24; //printf("%lf",(age1+age2+age3)/3.0); // 22.333333 printf("%lf",(double)((age1+age2+age3)/3)); // 22.000000 printf("%lf",(double)(age1+age2+age3)/3); // 22.333333
|