/* ******************************************* *
数据类型
说明数据大小
char 1
short 2
int 4
float 4
double 8
构造类型
存储类型
存放在内存中的位置
(堆, 栈(auto), 静态区域, 代码段)
功能
代码的操作(干什么)
+ - */ % & || 是运算符
控制语句
选择或循环
函数
* ******************************************** */
标识符
变量:
1. 数字, 字母, 下划线
2. 首字母不可以为数字, 且区分大小写
3. 不可与系统关键字相同
定义变量的格式:
<存储类型> <数据类型> <变量名>
| | | 申请空间的别名
| | 说明申请的空间的大小
- | char short int
- |
说明申请的空间在内存中的位置的.
auto static extern register
栈 静态 静态 寄存器
int a = 998; // 初始化
int b; 先定义
b = 998; 后赋值
常量:
直接常量:
- int a = 5;
- float f = 3.14159;
- "hello world";
- char c = 'A';
符号常量
- #define Pi 3.14159
- int a = 6;
- int const a = 6;
- const int a = 6;
- //const 表示将 a 常量化, 不可以通过对 a 赋值改变 a 的空间
存储基本单位:
位 bit
字节 byte KB MB GB
数据的表示方法:
1. 整数:
整型数据:
十进制
八进制 <只能表示整数(char short int long)>
十六进制 <只能表示整数(char short int long)>
二进制(C 语言不支持, 但计算机内部只识别二进制)
进制转换:
十进制 <==> 二进制
整数 -->二进制 辗转相除, 除 2 求余, 从下向上读
小数 -->二进制 乘 2 取整, 从上向下
二进制 ==>八进制
整型数据的有符号与无符号:
- signed int x; (有符号类型最高位作为符号 0 表示正数, 1 表示负数)
- unsigned int y; (最高位同样作为有效数据位)
整型的打印:
有符号类型;
printf("%d", x);
无符号类型:
printf("%u", y);
2. 字符:
ASCII 码:
原码:
直接转成二进制, 最原始的二进制表示方法, 但在负数运算时, 结果出错. 进而提出反码.
反码:
正数的反码和原码相同, 负数的反码是在原码的基础上取反(符号位不变). 反码解决了原码不能计算的问题, 但同时带来了 - 0, 进而提出了补码. (反码加法采用循环进位的方法)
补码:
正数的补码和反码相同
负数的补码在反码的基础上 + 1.(对原取反 + 1, 符号位除外)
取值范围:
有符号类型字符 : -128 ~ 127
无符号类型字符 : 0 ~ 255
PS:
类型的最大值 + 1 -->变成类型的最小值
类型的最小值 - 1 -->变成类型的最大值
3. 实型 / 浮点型:
单精度 float
1 位符号位 +8 位指数位 + 23 小数位 (偏移码 + 127)
将一个浮点型数据存放进内存:
1. 将浮点型数据转换成二进制指数形式, 获取符号位 指数 数据大小
2.float 内存最高位存放符号位, 紧接着 8 位存放指数 + 127 的二进制, 低 23 位存放数据的小数位, 没错, 数据的整数位直接丢弃(因为二进制数据的整数位一定是 1, 所以可以省略, 还原时加上就行)
演示:
6.9 存进内存
测试: 将 17.625 存进内存
双精度 double
1 位符号位 + 11 位指数位 + 52 小数位 (偏移码 + 1023)
精度范围 能保证 15 位有效数据
判断一个 float 型变量 x 是否为 0:
- #define EP 0.000001
- if ( (x<=EP)&&(x>=-EP) )
- {
- }
来源: http://www.bubuko.com/infodetail-2663043.html