一、为什么要有数据类型
数据类型的必要性(数据类型不一样对于编译器来说,根据他的数据类型来判断他的执行操作)
二、常量、变量
常量(在运行过程中,值不能发生改变)
变量(在运行过程中,值能发生改变)
三、变量为什么可以发生改变
任何变量都有各自的内存空间,分配到ram
RAM (random access memory) 随机访问存储器 (因为编号是随机开始,所以随机开始)内存指的是ram
ROM(read only memory)只读随机存储器,(外存)现在可读可写,掉电不丢失
四、内存空间
字节是用来存储空间最小单位,一个字节等于8bit。
五、标识符
标识符:i,j,k(标识符就是一个名字)
名字起名要求:名字,数字,下划线,标识符第一个位置只能是字母或者下划线,不能是数字
define n 数字 符号常量(宏定义)
注意
- Google要求的符号常量大写,二类字(include。。。。)实际上可以用标识符,但是习惯上不用。
- 关键字:不能做标识符。
- 不能在当下定义相同两个标识符
- 变量名区分大小写
- int $$$(特殊字符)(不具备可移植性)(要完全按照C语言来编写,这样的代码可以在其他编译器下进行移植)
常见关键字如下
六、数据类型
1、整型数据
整型常量; 有十进制,八进制 0,十六进制0x 注意: c 语言没有二进制代码
整型变量:有以下几种类型
- short 2个字节 [-32768,32767]
- unsigned short 2个字节 [0,2^16-1]
- int 4个字节 [-2^31,2^31-1]
- unsigned int 4个字节 [0,2^32-1]
- long 8个字节 [-2^63,2^63-1]
- unsigned long 8个字节 [0,2^64-1]
- long long 8个字节
注意
①long long =long 字节长度都是八字节,虽然用法一样,但是不是同一个类型。
②无符号整型:针对有些数据只有正整数,不存在负数
③整型溢出,超过所容纳的范围。字节数不一样,所存储的范围不一样
④我们所想的数字在内存中的排列可能与实际内存中的排列不符合,这是因为:
小端,倒放(数据)低低高高)
大端,正放(0低高高低)
常见体系所用的模式:X86 ARM架构 采用小端模式。51 大端模式
2、浮点型数据
浮点型常量
表示形式:1、十进制小数;2、指数形式
注意
e的右边必须是整型(可正可负),不能是小数。否则会报错,如下图所示,这种写法是错误的。
f=123e0.5
浮点型变量
float 单精度
double 双精度
存储的规则由IEEE组织小数存储,规则如下
先将数字写成二进制,再用科学计数法,将小数点进行移动,小数的前面只保留一位小数。最后的阶码是在计算的次方数值基础上加127
注意
浮点型,计算的结果在里面存储的时候有可能没有办法存储完全,所以存储的值比实际值较小
比如
要想比较,在C/c++里面类型要匹配,要么是兼容类型。
3、字符类型
字符:常用来装字符
因为char c 与int 兼容,所以char 也支持加减
- signed char [-2^7,2^7-1]
- unsigned char [0,2^8-1]
一对单引号 字符型常量
一对双引号 字符串
注意字符型常量考题:'ll'里面可以有两个只会warning,没有error,最终显示的是这几个里面的最后一个
不可见字符,转义字符:+其他
常见转义字符以及作用
详细解释如下几个内容
\t 占八个字符,这八个字符横向占八个,在他前面
\b 相当于光标向前移动一个
\r 回车是回到光标的第一个
\ 转义字符,\ \表示一个反斜杠字符
\ 123 这个123代表的是八进制数不是十进制数,所以在计算的时候需要进行进制转换。
注意 :整型数据以及字符数据的区别如下