一.数据类型
- 基本类型:整型–int、字符型–char、实型(浮点型)–单精度实型float,双精度实型double
- 构造类型–数组类型–[ ],结构类型–struct,联合类型–union,枚举类型–enum
- 指针类型–*
- 空类型(无值类)–void
二.常量
不能改变的量
整型,100,0,-10
实型,3.12,0.1125,-3.21
字符型,‘a’, ‘2’,必须单引号,里面必须有字符
字符串型,“a”, “ab”,“1c23”,必须双引号,里面没有字符就是空串
三.变量
代码段在执行时候只读,不可写。
四.整型数据
4.1.符号常量
下面的sun不能修改,因为#define定义了sun=7,下面相当于7=3 ?,符号常量不能修改。
4.2.整型常量的不同进制表示
计算机只存储二进制,即0和1,对应物理硬件上是高低电平。
一个字节=8位,1位即二进制的1位,存储0或1.
int型,大小为4个字节,32位。
设有二进制数:0100 1100 00111 0001 0101 0110 1111 1110, 其最低位是2的0次方,最高位是2的30次方,最高位是符号位
上面对应八进制数:011414253376,它以0开头标识,数位的变化范围是0-7. 二进制转8进制方法:对应的二进制数每三位转换成一位八进制数。实际编程时,识别八进制数时要在前面加0.
上面对应十进制数:1278301950
上面对应十六进制数0x4C3156FE, 它以0x开头标识。数位变化范围是0-9,A-F,A代表10,F代表15. 对应二进制数每4位转换一位十六进制数。
4.3.进制转化
1.BIN:binary,二进制的;
2.OCT:octal,八进制的;
3.HEX:hexadecimal,十六进制的;
4.DEC:decimal,十进制的。
二进制与十进制之间的转换
十进制转二进制
方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除,直到商为0为止。
二进制转十进制
方法为:把二进制数按权展开、相加即得十进制数。
二进制与八进制之间的转换
1.八进制转二进制
方法为:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。
2.二进制转八进制
方法为:3位二进制数按权展开相加得到1位八进制数。(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0)。
二进制与十六进制之间的转换
1.十六进制转二进制
方法为:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。
2.二进制转十六进制
方法为:与二进制转八进制方法近似,八进制是取三合一,十六进制是取四合一。(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。
十进制与八进制与十六进制之间的转换
1.十进制转八进制或者十六进制有两种方法
第一:间接法—把十进制转成二进制,然后再由二进制转成八进制或者十六进制。这里不再做图片用法解释。
第二:直接法—把十进制转八进制或者十六进制按照除8或者16取余,直到商为0为止。(具体用法如下图)
2.八进制或者十六进制转成十进制
方法为:把八进制、十六进制数按权展开、相加即得十进制数。
(具体用法如下图)
英特尔cpu小端 低位在前 高位在后
4.4.补码
- CPU中只有加法器,无减法器
计算机cpu只能做加法 所以要做减法乘除法 要转换成加法 这时候就引入了补码 - 补码=原码按位取反+1
例如 i=5
计算机怎么表示 i=-5 原码按位取反+1
原码 0000 0000 0000 0000 0000 0000 0000 0101
取反 1111 1111 1111 1111 1111 1111 1111 1010
加1 1111 1111 1111 1111 1111 1111 1111 1011
//地址是按16进制表示 1111 16进制是f 1011 16进制是b
2-5相当于2+(-5),即
0000 0000 0000 0000 0000 0000 0000 0010
+1111 1111 1111 1111 1111 1111 1111 1011,
按位相加得
1111 1111 1111 1111 1111 1111 1111 1101=0xff ff ff fd
即-3(最高位是1,为负,先输出-,再按位取反加一得3,即-3)
5.整型变量
缺省的意思就是默认,写与不写都行。
下面是我对这个范围的两个理解:
假设int型用两个字节表示
对于有符号的整数,用补码表示的话,最高位是符号位,后面15位用来表示数据.
1.正数,表示的范围为0000 0000 0000 0001-0111 1111 1111 1111,最高位是符号位,不能用于表示数据,所以正数的数值范围为1~32767.
2.0:0000 0000 0000 0000
3.负数,负数的补码是原码取反加1,CPU的加减法运算,是循环进行加减的,即当其由0000 0000 0000 0000加到1111 1111 1111 1111时,如果再加1,就又会为0000 0000 0000 0000了,此时溢出寄存器会置位.而当其由0000 0000 0000 0001减1,即为0000 0000 0000 0000,如果再减1,就会为1111 1111 1111 1111,这就是-1。那么,从0000 0000 0000 0000可以减到什么时候呢?当然是不能与正数的补码重合的,所以可以从1111 1111 1111 1111~1000 0000 0000 0000,即从-1到-32768.
所以,数值范围是-32768~32767.
来看原码的正0和负0:0000000000000000和1000000000000000,补码表示中,前者的补码还是0000000000000000,后者经过非符号位取反加1后,同样变成了0000000000000000,也就是正0和负0在补码系统中的编码是一样的。但是,我们知道,16位二进制数可以表示2的16次方个编码,而在补码中零的编码只有一个,也就是补码中会比原码多一个编码出来,这个编码就是1000000000000000,因为任何一个原码都不可能在转成补码时变成1000000000000000。所以,人为规定1000000000000000这个补码编码为-32768。
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=2021052912081370.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MDgwMjgzOQ==,size_16,color_FFFFFF,t_70
例子
Short i 有符号整型
Unsigned short 无符号整型
%d输出的是有符号
80fb
1000 0000 1111 1011 二进制
原码 取反加1得
0111 1111 0000 0100 +1
0111 1111 0000 0101
转化16 =32517
i 使用int带符号所以取反加1
J 使用无符号整型 所以直接转换了
五.浮点型数据
5.1.浮点型常量
指数表示法
5.2.浮点型变量
- float 4个字节
- double 8个字节