C语言中的数据类型
基本类型
- 数值类型
- 整型
- 短整型:short
- 整型:int
- 长整型:long
- 长长整型:long long
- 浮点型
- 单精度:float
- 双精度:double
- 字符类型:char
- 整型
- 自定义/构造类型
- 结构体:struct
- 共用体:union
- 枚举:enum
- 指针类型:*
- 空类型:void
常量与变量
在C语言中的表现形式是常量与变量。
常量
常量:在程序执行过程中其值不能改变的量称之为常量。
数值常量
1.整数常量
- 二进制常量:以0b开头,由0,1两个数字构成
举例:0b1111、0b0110、0b01110101
- 八进制常量:以0开头,由0~7八个数字构成
举例:012345、07654、-075
-
十进制常量:默认,由0~9共十个数字构成
举例:1234、9876、-2564
-
十六进制常量:以0x开头,由0~9,A-F共16个字符构成,一般用于嵌入式开发
举例:0xFFFFFF、0xFFFF00
2.小数常量
单精度:常常给单精度的数值后加F作为标记
举例:12.24F、-45.4444F
双精度:默认就是双精度
举例:12.24、-45.4444
字符常量
用单引号 ' '引起来的单个字符
举例:'a'、'1'
注意:'a'——字符,'马'——错误
转义符:
'\n':换行符
'\t':制表符
'\\':反斜线,\
'\0':0字符对应的ASCII码值是0
符号常量
使用 #define 定义的宏
举例:
字符串常量
使用“...” 引起来的字符序列,称之为字符串常量
注意:C语言常量是支持字符串的,C语言变量不支持字符串(需要字符数组或者字符指针进行模拟)
系统自动为字符串常量加上结尾符“\0”,使所占内存单元多一个,但字符串常量的长度不变,可用
sizeof( )运算符来测量。
空常量
用于给指针变量作为默认值初始化:int *p = NULL;
注意:
*前面是常量或者变量,此时*是数学运算符乘号,*前面是数据类型,此时*表示指针
补充
长整型一般在数值后加L 或者l ;长长整型一般在数值后加LL 或者ll
变量
说明
在程序执行过程中可以改变的量称之为变量。
变量是内存中一块用来存储数据的空间。
变量由变量名+变量值构成。通过变量名可以存放和获取变量值。
变量定义格式
举例:
变量名的命名要符合下列两个规则
变量名必须以字母或下划线开头,后面可以跟若干个字母、数字或下划线,如:max_width
变量名不能与C语言中已经存在的标识符重名,也就是关键字和保留字不能作为变量名
变量名、变量值、变量所占存储单元之间的关系
注意:在C语言中,要求对所用到的变量使用前必须先强制定义,即:先定义,后使用。
扩展
常见的字符编码
ASCII:1个字符等于1个字节,总共256个字符,针对程序内部
GBK:1个字符等于2个字节,表示简体、繁体及其符号。“。表示:\xced2
Unicode:四个字节表示:全球统一 编码,囊括了全世界所有的字符。表示:\u6211
UTF-8:长度变化的字符集,是对Unicode字符集的优化,提高效率,表示:\xe68891
进制转换
我们目前接触到的进制有 二进制、八进制、十进制、十六进制
八进制整型常量:以0(数字0)为前缀,其后由0到7的数字组成
十六进制整型常量:以0x或0X为前缀,其后由0到9的数字和A到 F(大小写均可)字母组成
其他进制 转 十进制: 按权相加
1. (1234)10 = 4 * 100 + 3 * 101+2 * 102 + 1 * 103
2. (0x1234)16 = 4 * 160 + 3 * 161 + 2 * 162 +1 * 163
十进制 转 其他进制:
辗转相除法:将需要转换的数据不停的除以转换的进制数,直到商为0
- 十进制转二进制:
2.十进制转八进制:
八进制 转 十六进制:
借助于二进制,将八进制转换为二进制,将二进制转换为十六进制
十六进制 转 八进制:
借助于二进制,将十六进制转换为二进制,将二进制转换为八进制。
有符号数和无符号数
在C语言中,整数是可以带符号的(有符号,signed)或不带符号的(无符号,unsigned)。这两种类型的整数在内存中以二进制形式表示。并使用不同的模式。
有符号数(Signed Numbers)
有符号数是来表示正数、负数、0的整数类型。在内存中,有符号数使用最高位(通常是符号位) 来表示正负。如果最高位为0,表示这个数是正数或0,如果最高位为1,表示这个数是负数。其余位用于表示数值本身。
举例:例如一个8位有符号整数可以表示的范围是-128~127,这是因为1位用于表示符号(正或负)
注意:有符号位是默认的,在C语言中,基本整数类型如int,short,long默认为有符号数,除非明确指定为无符号。
举例:
无符号数(Unsigned Numbers)
无符号数是只能表示非负整数的数据类型。在内存中,无符号数不使用符号位,所有位都用于表示数值。因为,无符号数的范围比有符号数的范围更大。
注意:在C语言中,通过关键字后添加unsigned。来指定无符号类型,如unsigned int、unsigned short。。。
举例:例如一个8位无符号整数可以表示的范围是没有符号位0~255,这是因为所有8位都用来表示数值,没有符号位。
原码、反码和补码
原码:是最简单的机器数表示法,用最高位表示符号位,其他位存放该数的二进制的绝对值。
反码:正数的反码和原码一致;负数的反码就是它的原码除符号位外,按位取反
补码:正数的原码、反码、补码都一致;负数的补码等于反码+1。
C语言32个关键字
auto default float register struct volatile break do for return switch while case double goto short typedef char else if signed union const enum int sizeof unsign continue extern long static void