一:各进制之间的转换
进制:我们也把进制叫做进制位,是人们规定的一种进位方式。我们可以使用有限的数字符号来代表所有的数值。可使用的数字符号的数目,我们称为基数。基数为n,则为n进制。数制中某一位上的1所表示数值的大小我们称为位权。
(1):十进制转为二进制
1).整数部分的转换
方法:除2取余法(辗转相除法)
(2)各进制转换为十进制
(3):八进制十六进制转换为二进制
当给一个二进制数转换为八进制的时候,从右往左取三位二进制数,不足的添零
类如:一个二进制数1010100011
我们可以将它分为001 010 100 011则其对应的八进制数为1243
当给一个二进制数转换为十六进制的时候,从右往左取四位二进制数,不足的添零
类如:一个二进制数1010100011
我们可以将它分为0010 1010 0011则其对应的八进制数为2a3
知道对应关系后我们就能在二进制,八进制,十六进制之间可以进行灵活转换。
二:数据类型
c语言的数据类型可以分为基本数据类型,构造数据类型,指针类型和空类型。我们先来熟悉一下基本数据类型,基本数据类型可以分为整型,浮点型,字符型和枚举型。
(1):整型
常量形式123 十进制整型常量
0x123 十六进制整型常量
0123 八进制整型常量
整型变量
数据类型 变量名;
常用数据类型为: int
short
long
long long
上述变量名都有正有负,也可以只定义为正数,在前面加上unsigned即可,一般定义下有符号的signed可以省略。
变量名:是一个名称-----标识符
(1):数字,字母,下划线组成。
(2):开头不能是数字。
(3):不能与关键字重名。
(4):不要和预处理命令和库函数名重名。
数据类型的大小
int 四个字节
short 二个字节
long 八个字节
long long 八个字节
sizeof(运算数) 计算运算数所代表的数据类型占用的内存空间的字节数
运算数 可以是一个类型名
sizeof(int)
可以是变量名
sizeof(a)
可以是个常量或表达式
sizeof(10)
sizeof(a+10)
整数在内存中的存储方式为小端存储,即高位数据存在高地址处。
整数
计算机最终存储的都是 他们的补码形式
正数
原码 反码 补码 都是一样的
负数
补码为反码 + 1
正数 123
0111 1011 //原码
0111 1011 //反码
0111 1011 //补码
负数 -7
1|000 0000 0000 0000 0000 0000 0000 0111 //原码
1|111 1111 1111 1111 1111 1111 1111 1000 //反码
1|111 1111 1111 1111 1111 1111 1111 1001 //补码
f f f f f f f 9
负数的反码 是 原码 的符号位不变 其余位按位取反
整型类型取值范围
int 4字节
unsigned int 0~2^32-1
signed int -2^31 ~ 2^31- 1
short 2字节
unsigned short 0~2^16-1 //65535
signed short -32768 ~ 32767
long 8字节
long long 8字节
(2):浮点型
1.浮点型 常量形式
1.23
1.23e-4 //科学计数法形式 1.23 * 10^-4
1.23E-4
2.浮点型 变量
关键字
float 单精度
double 双精度 --- 精度
long double
定义变量
float f;
3.浮点型 大小
float 4字节
double 8字节
long double 16字节
4.浮点数的存储
12.125 //存到计算机
step1: 首先 将十进制形式的小数,写成 二进制形式的小数
整数
除2取余法
小数部分
乘2取整法
12 --- 1100
0.125 * 2 = 0.25 --- 0
0.25 * 2 = 0.5 --- 0
0.5 * 2 = 1 --- 1
0.001
二进制形式
1100.001
step2: 将二进制形式的小数 写成 科学计数法形式
1100.001 => 1.100001 * 2^3
step3: 按照 IEEE 754 标准 存放
IEEE 754标准
float
1位 符号位|8位 指数位 |23位 尾数位
+127
double
1位 符号位|11位 指数位 |52位 尾数位
+1023
1位 | 8位 充当 指数位 | 23位
符号位 | | 尾数位
0 3 + 127(偏移量) 100001
0100 0001 0100 0010 0000 0000 0000 0000 // 12.125 存到计算机中的样子
4 1 4 2 0 0 0 0
(3):字符型
符号 --- 放到计算机中
'a' --计算机中保存实际上是这个符号 对应 ascii的编码值
0~32 控制字符(不可见字符)
48~57 数字字符 '0' ~ '9'
65~90 英文的26个大写 字母的符号
97~122 英文的26个小写 字母的符号
1).字符型常量
'a' //字符常量 a这个常量
2).字符型变量
char
char ch; //一个字节
char ch = 'a';
ch这个变量中 最终放的放的实际上是 'a' 对应的ascii码 值 (整型)
char //tiny int --小整型
char 也一种整型类型 说char和整型之间是通用的
unsigned char ch; //[0 ~ 255]
signed char a = 10; //[-128 ~ 127]
a = -10;
char ch = '1';
printf("%d\n",ch - 48); //数值1
printf("%d\n",ch - '0'); //数值1
将字符1转换为了数字1
四:重点
整数的溢出
整数 存储 和 使用 分开的
unsigned short a = 65535; //1111 1111 1111 1111
unsigned short b = -65535;
1 1111 1111 1111 1111
1 0000 0000 0000 0001
浮点的比较
代码中出现的 变量 或 常量 一定有其对应的数据类型
代码中出现的 浮点型常量 默认识别为 double 类型
0.9 * 2 = 1.8 --- 1
0.8 * 2 = 1.6 --- 1
0.6 * 2 = 1.2 --- 1
0.2 * 2 = 0.4 --- 0
0.4 * 2 = 0.8 --- 0
0.8 * 2 = 1.6 --- 1
....
1.1101 ... * 2 ^ n
浮点数的比较:
保证精度一致
类型一致
常量也可以指定类型:
0.9f //表示被识别为 float类型
123 //默认识别为 int类型
123L //识别为long类型
123LU //unsigned long
123LL //long long
123LLU //unsigned long long