3、基本数据类型、运算符与表达式
著名计算机科学家沃思提出:程序=数据结构+算法。
算法就是对数据处理的描述,算法是为解决一个问题而采取的方法和步骤,是程序的灵魂。
1、C语言的数据类型
C语言在处理数据之前,必须具有明确的数据类型。因此,C语言是一种强类型语言。
C语言中,数据类型可以划分为 基本数据类型、构造数据类型、指针类型、空类型 四大类。
2、常量、变量和标识符
C语言中存在这两种表征数据的形式:常量和变量。常量用来表示数据的值,变量不仅可以用来表示数据的值,而且可以用来存放数据。因为变量对应这一定的存储单元。
常量是程序在运行时其值不能改变的量称为常量(即常数)。
常量分为:直接常量(值常量)和符号常量。
直接常量主要包括整型常数、实型常量、字符常量、字符串常量。
符号常量用标识符来代替常量。定义一个符号常量需要使用一条预处理命令 #define,例如 #define 符号常量 常量
(define 前面的#标志着define是一个预处理命令,而不是C语句。)
变量就是在程序运行过程中,其值可以被改变的量称为变量。对变量进行赋值就是将数据写到变量所对应的内存单元中。
标识符的有效长度:在TC2.0 及BC3.1 中为1~32个字符,默认值为32,但在VC6.0 、VC2010 、CB17.12 中其长度可达255
3、简单数据类型与表示范围
1、整数的数值在内存中以补码的形式存放。
2、在TC2.0 或 BC3.1 下,一个整数默认情况下需要2字节(16位)的内存单元存放;而在VC6.0、VC2010或CB下,则需 要4字节(32位)。
3、数据在内存中的存放位置是高字节放在高地址的存储单元中,低字节放在低地址的存储单元中。
4、**数据溢出!!!**例如 -65535在16位的内存单元中的存储 65535的补码,再取反,再加 1 ,最后保留16位。
5、当程序定义了一个变量后,计算机会为这个变量分配一个相应大小的内存单元,因此这个变量是有值的,它的值就是对 应内存单元的值。但这个只是无法预知的。
6、对于有符号数和无符号数,其实在计算机内存中的表示是不加区分的(但运算时有区别),都是以补码形式表示。
7、实型也称浮点型。它有两种形式:十进制小数形式和十进制指数形式。
- 十进制小数形式:由数码0~9和小数点组成。
- 十进制指数形式:由十进制数,加阶码标志e或E以及阶码(只能为整数,可以带符号)组成。其一般形式为aEn,a为十进制数,n为十进制整数,都不可缺少。
- 对于浮点数,小数部分占的位数越多,它所能表示的精度越高,阶码部分占的位数越多,它所能表示的值越大。
- 三种实数类型中,其精度是float<double<long double
- long float 就是double。
- 所有的实型常量按照double类型处理。
8、字符型数据实际上就是整型数据。但它只占用1字节(8位)的内存单元,用于存放该字符所对应的ASCLL码的值。
9、字符常量只能用单引号括起来,不能用双引号或其他括号。它还可以用转义字符表示。
10、广义地讲,C语言字符集中的任何一个字符均可以用转义字符表示。(‘\134’ 表示反斜线)
11、C语言中没有相应的字符串变量。
12、被赋值变量的值就是赋值表达式的值。
13、连续赋值表达式的运算顺序是从右至左(又称右结合性)。
14、强制类型转换
- 自动转换:1.短长度的数据类型——>长长度的数据类型。2.长长度的数据类型——>短长度的数据类型。
无符号短长度——>长长度 高位补0
有符号短长度——>长长度 符号位向高位扩展
长长度——>短长度 直接截取
- 强制转换:(类型说明符)(表达式)
15、%只能用于整数的运算。
16、表达式就是用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合C语言语法规则的式子。
17、算术表达式就是表达式中的运算符都是算术运算符。
18、++ 和-- 运算符只能用于变量,不能用于常量和表达式,因为它们蕴含着赋值操作。当它们连用时,按从右到左的顺 序。
19、位运算符包括按位与(&),按位或(|),按位取反(~),按位异或(^),左移(<<)和右移(>>),位运算符只能作用于整型数 据(它们包括int、short、long和char)。(按位取反>移位>按位与>按位异或>按位或)
- 左移:对某变量所对应的二进制数往左移位,溢出的最高位被丢掉,空出地位用零填补。
- 右移:对某变量所对应的二进制数往右移位,溢出的最低位被丢掉,如果变量是无符号数,空出的高位用零填补,如果变量是有符号数,空出的高位用原来的符号位填补(即负数填1,正数填0)
- 移位运算符两边必须是整型数,否则非法。且移位不改变变量的值。
20、sizeof 表达式 sizeof(数据类型名或表达式)。
21、在C语言操作中,如果遇到无符号数与有符号数之间的操作,编译器会自动转换为无符号数来进行处理。