关于C语言的基础知识:
一、C语言的所有数据类型
二、常量与变量
三、标识符和关键字
四、整型数在计算机中的存储方式
五、有符号的数据类型和无符号的数据类型
六、运算符和表达式
常量:
常量:在程序运行过程中,其值不能改变的量成为常量。
类型:整型常量(int)、实型常量(float和double)、字符常量(char)、字符串常量;其中整型常量分为短整型(short int)、长整型(long int)、无符号型(unsigned int)等。
1. 整型常量
都以二进制形式存储
① 十进制整型常量
② 八进制整型常量,以数字0开头。用合法的八进制数字表示,各位数字分别是0到7
③ 十六进制整型常量,以数字0和字母x(或大写字符X)开头,各位数字分别是0到15,其中10(A-a)、11(B-b)、12(C-c)、13(D-d)、14(E-e)、15(F-f);如0x10,0Xff,0X8
2. 实型常量
实型常量:即数值常量,有正负之分,只能用十进制形式表示。可以用小数形式或指数形式表示。实型常量不分单、双精度,但可赋给一个float型或double型变量。其中,指数形式的浮点常量E或e前面必须有数字,E或e后面必须为整数。
3. 字符常量
字符常量:用一对单撇号括起来的一个字符,如'a'。单撇号只是字符与其他部分的分隔符或是定界符,并不是常量的一部分
4. 转义字符
有些字符和命令无法通过键盘直接输入,因而借用一个符号或数字来表示。\ 是起始符。
类型:① 字符转义系列 ② 数字转义系列
3种表示方法:
① 反斜杠开头后面跟一个字母代表一个控制字符;\n \t \r \b
② \\ 代表 \,用\’代表引号字符
③ 输出不能直接从键盘上输入或不能用字符常量书写的ASCII字符;\ddd:1-3位八进制所代表的字符;\xhh:1-2位十六进制所代表的字符
5. 字符串常量
简称为字符串。双撇号为定界符,不属于字符串。
字符串中的字符数称为该字符串的长度,在存储时,系统自动在字符串的末尾加一个字符串结束表示,是转义字符\0,即多占一个字节,其标记作用。
6. 符号常量
标识符代替常量。
#define PRICE 30,凡此后在本文件出现的PRICE都代表30,可和常量一起进行运算。
在作用域类不能改变,也不能再被赋值。
好处:含义清楚;一改全改。
7. 布尔类型
Bool是无符号的整型变量。
变量:
程序运行中可以发生变化的量。占据一定的存储单元,存放变量的值,保存程序运行中的输入数据,获得中间结果和最终结果。
① 变量的声明:一个定义语句可以同时定义多个变量。可在函数体之外,也可在函数体或符合语句内。
② 变量的初始化:可在声明变量的同时对其初始化;也可对声明的变量的一部分初始化。不同类型的数据在内存占据不同的存储区;一种数据类型对应着一个值的范围;一种数据类型对应着一组允许的操作,如对整型数据可进行求余。
先声明语句指定变量的类型,在编译时指定的类型分配其一定的存储空间,并决定数据的存储方式和允许操作的方式。
变量定义后设计4个相关的内容:变量名、变量的存储空间及内容、变量的地址、变量的作用域。
语法单位分为六类:标识符、关键字、常量、字符串、运算符、分隔符。
1. 标识符
是给程序中的实体(变量、常量、函数、数组、结构体)以及文件所起的名字。即是一个名字,由设计者或系统指定。
规则如下:
① 以字母(A-Z,a-z)和下划线“_”开头,由字母、数字字符(0-9)和下划线组成的字符系列。
② 系统使用了下划线开头的标识符。
③ 长度无规定
④ 区分大小写
原则如下:
① 见名知其意
② 变量名和函数名小写,符号常量大写
③ 避免混淆的字符
2. 关键字
由编译程序预定义、有固定含义的、在组成结构上由小写字母构成的标识符。又称保留字,保留专门用途的特殊标识符。
1. 内存储器的最小存储单位成为“位”(bit);8个二进制位组成一个“字节”(byte);给4个字节分配一个地址,若干字节组成一个“字”(word)。用一个字来存放一条机器指令或一个数据。
2. 最右边的一位称为最低位,最左边的一位称为最高位。最高位(最左边一位)用以存放整数的符号。0位正整数,1为负整数。
3. 原码
把整数的绝对值用二进制表示,最高位用于表示符号,0是正数,1是负数。二进制位越多,表示数的范围越大。符号不同的两个数不能直接相加,也不能直接相减。
4. 反码
正数的反码和原码相同。
负数的反码是对该数的原码除了符号位外各位取反。
5. 补码
正数的补码和原码相同;
负数的补码是在该数的反码的最后(最右边)一位加1。
引入补码后,计算机的加减运算都可用加法来实现。
6. 正整数的原码、反码、补码相同。
求负整数的补码步骤:
① 求负整数的原码 ② 在原码的基础上求反码 ③ 在反码的基础上加1
1. 在内存存储整数时,一般用最高位(最左边一位)表示符号。数值以补码的形式存放。
2. 无符号(unsigned)的整型数据,将二进制形式的最左位不作为符号,而与右边各位一起用来表示数值,若定义了unsigned int 只能存放正数而不能存放负数。
3. 字符型的数据也有singed和unsigned两种数据类型。字符型的数据占一个字节(8位),标准的ASCII字符允许范围0到127,用7位即可,最左边一位补0。
4. 实型数据没有unsigned 和 singed之分,均带符号
运算即对数据的加工。C语言对数据的基本操作和处理都是运算符来完成的。称为运算符或操作符。被运算的对象——数据称为运算量或操作数。
运算符可执行对操作数的各种操作,按操作数分为单目(一元)运算数、双目(二元)运算符、三目(三元)运算符。
运算符的功能:算术运算符、关系运算符、逻辑运算符、自增与自减运算符、赋值运算符、条件运算符。
表示数组下标[]、表示函数调用()、表示顺序求值,,以及类型强制转换符(类型)。
具体归纳如下:
表达式:对哪些数据,以什么顺序及其施加什么操作。
表达式=运算符+运算符量(常量、变量、函数)
表达式运算规则:由运算符的功能和运算符的优先级与结合性决定。将运算符分成若干组,按运算符执行先后顺序为每组规定一个等级-优先级;处于同一优先级的运算符顺序称为运算符的结合性,从左到右或从右到左。
1. 赋值运算符和赋值表达式
① 当赋值符号两边数据类型不同时,系统自动进行类型转换,将赋值号右边表达式的类型转换为左边变量的类型,再赋值。
赋值运算符的优先级仅仅高于逗号运算符,自右向左的结合性。
算术运算符高于赋值运算符。
有括号的坚持括号优先。
2. 算术运算符和算术表达式
算术运算符:+、-、*、/、%、++、--
双目运算符+、-、*、/的操作数可以是任何整数或浮点数;其中+、-可用于指针加或减一个整数。
双目运算符的两个操作数类型可以不同,运算前遵循类型的一般算术转换规则自动转换成相同的类型,运算结果的类型与转换后操作数的类型相同。
转换原则:值域较窄的类型向值域较宽的类型转换。例,13.0+5=180.0-5(int)被转换为double;'d'-97=100 – 'd(char)'被转换为int;
运算符 / :两操作数都是整数,则执行整除数;否则,执行实数除,结果为浮点数
运算符 % :两操作数必须是整数,结果也是整数,值为左操作数除以右操作数所得的余数
运算符 ++、--:即可用在前缀,也可用在后缀,结构是使变量增1或减1;
++a前缀:先增加、减少再取值;即先自增后运算
a++后缀:先取值,再增加、减少;即先运算后自增
运算的结合方向是自右向左;只能用于整型变量。
3. 长度测试符号sizeof
测试某个类型的变量所占用计算机内存空间的字节长度
4. 关系运算符和关系表达式
① 关系运算符:即比较运算符,比较两个运算对象值的大小
关系运算符为双目运算符,方向为从左向右;结果为1(真)或0(假);
算术运算符高于关系运算符
② 关系表达式
关系表达式=关系运算符+运算对象+小括号组成的表达式;表达式成立返回整型值1;否则返回0。
运算方向是从左到右:x=10>5>3;
5. 逻辑运算符与逻辑表达式
① 逻辑运算符-自左向右
优先级次序:逻辑非>算术运算>关系运算>逻辑与>逻辑或>赋值运算
② 逻辑表达式
用逻辑运算符将关系表达式连接起来构成逻辑表达式。
对象可是C语言中任意合法的表达式。
结果为1(真)、0(假)
非0数都为真。
特性:必需执行下一个表达式才能求解时,才求该表达式;并不是所有的表达式都被求解。
&&:前一个表达式为假(0),都为假(0);
||:前一个表达式为真(1),都为真(1);
6. 条件运算符与条件表达式
条件运算符 ? 是C语言提供唯一一个三目运算符。
执行顺序:先求解表达式1,若为1,再求解表达式2,则该表达式的值就为整个表达式的值;
若表达式1的值为0,则求解表达式3,则该表达式的值就为整个表达式的值。
格式:表达式1?表达式2:表达式3
条件运算符的优先级别仅仅高于赋值运算符,低于关系运算符和算术运算符。
结合方向:自右向左,例a>b?a:c>d?c:d;等价于 a>b?a:(c>d?:c:d);
7. 逗号运算符与逗号表达式
即顺序求值运算符。
从左向右依次计算表达式1,扔掉表达式1的值,再计算表达式2。
逗号表达式可以和另外一个表达式组成一个新的逗号表达式;
在变量和函数表中逗号起间隔符作用;
逗号表达式是将各个表达式串联起来
8. 位运算
对运算对象按照二进制位进行操作,对字节或字中的实际位进行检测、设置、位移
运算对象只能是字符型或整型变量及它们的变体。
① 按位取反(~):对二进制按位取反,1变0,0变1
② 按位与(&):参加运算的两个数据,按照二进制位进行&运算,如两个相应的二进制都为1,则该位的结果为1,否则为0
功能:清0;全部二进制位为0,条件:原数中为1的位,新数中为0;
取一个数中的某些指定位;如取高字节、或低字节
③ 按位或|;一个为1即为1;某一个数据的某些特殊位置,低8位与高8位
④ 按位异或^。判断两个相应位的值是否不同,不同为1,否则为0。
功能:特定位反转;与0相异或保留原值;不用中间变量就可交换两个数的值
⑤ 左移<< ,乘法,移位后,右端出现的空位补0,移出左端之外舍弃
⑥ 右移>>,除法,二进制位右移2位,右端低位舍弃,高位补0