C语言学习总结
第三章 数据类型、运算符与表达式
数据类型:signed 、unsigned
字符型:char 8bit=1Byte -128 – 127、char 0 –
255
整型unsigned:
short 2Byte -32768 – 32767
unsigend short 0
– 65535
int 4B -2147483648 – 2147483647
unsigned int 0
– 4294967295
long == int
unsigend long == unsigend int
long long 8B
浮点型(没有unsigned):
float 4B
double 8B
long double 8B
枚举类型:
如果一个数据只有几种为数不多的可能取值
enum
DERECTION { EAST , SOUTH , WEST, NORTH };
为已有的类型起个新的名字,因为已有类型名太长或为了方便移植。
1.用已有变量名定义一个变量 unsigned int u;
2.将变量名换成新的类型名 unsigned int UINT;
3.在最前边加typedef typedef unsigned int UINT;
4.可以用新的类型名定义变量了 UINT u;
常量:在程序运行过程中,其值不能被改变的量称为常量,
例如(1.直接常量123,123.456,“hello”‘a’
2.符号常量 #define PI 3.14159
3.常量 const int i = 10; int a[常量或常量表达式];
int a[i]; CPP OK i是常量 int a[i]; C error i是只读变量)
字符串常量
用双引号括起的字符序列,转义字符
printf("%d\n", strlen(“abcde”));
5
printf("%d\n", strlen(“c:\test.txt”));
11
printf("%d\n", strlen(“123\059\789”));
8
变量: 类型名 变量名;
代码质量:正确性、可靠性、可读性、性能。
变量名(标识符)
标识符:1.只能以数字,下划线和字母构成,首字母不能是数字
2.不能与关键字(在代码中承担特殊语法含义的字符序列)冲突
3.大小写敏感
4.见其名,知其意
整型数据在内存中的存放形式:
一个正整数的补码和该数的原码相同。
负数的补码,概述的绝对值按位取反加一.
123 0000
0000 0000 0000 0000 0000 0111 1011
-123 该数的绝对值位取反
1111 1111 1111 1111 1111 1111 1000 0100
再加1
1111 1111 1111 1111 1111 1111 1000 0101
小端序:低字节存在低地址位,高字节存在高地址位。
大端序:低字节存在高地址位,高字节存在低地址位。
变量的初始化 eg:int a=3; 赋值 eg:int a;a=3;
运算符三属性:优先级,结合方向,目数。出现多个运算符,由优先级确定计算顺序。出现多个同优先级运算符,由结合方向确定计算顺序。目数决定运算度需要几个数才能完成运算。
不同类型间的数据不能混合运算,要运算必须类型相同(转换)
转换原则:低精度,低取值范围高精度,高取值范围。
eg:1.0/(double)5 显式
1.0/5 隐式
不同类型数据之间的赋值
整型 = 实型 小数点后截断,保留整数部分;
实型 = 整型 加.0;
整型 = 整型;
短=长 保留低位,舍弃高位
int
a = 123456789;
short
s;
0000
0111 0101 1011 1100 1101 0001 0101
XXXX
XXXX XXXX XXXX
1100
1101 0001 0101
长 =
短
长 =
无短 低位复制,高位补零
长 =
有短 低位复制,高位符号位扩展(正数补0,负数补1)
算术运算符的正负取决于左操作数。
算术运算符:i = a % b; i的正负和a一致 i
= 5 / 3 * 3; i = 5 * 3 / 3;
转换运算符:i = (int)7.5+3.9;
逗号运算符:(a+3,s-5,a+s)最后一个逗号后面的表达式的值
自增,自减运算符,前增量先加再用,后增量先用再加(遇见分号)
第十二章
位运算
位运算的操作数只能是整型或字符型
“按位与”运算符 & 0&0=0,0&1=0,1&0=0,1&1=1
“按位或”运算符
| 0|0=0, 0|1=1, 1|0=1, 1|1=1
“异或”运算符 ^
0^0=0, 01=1,10=1,1^1=0
“取反”运算符
~ ~1=0, ~0=1
“左移”运算符 << 相当于乘2
a=a<<2; 若a=15 二进制表示为00001111,左移两位即00111100,即十进制数60
“右移”运算符
>> 不是除2,移到右端的低位被舍弃,对无符号数,高位补零。
a>>2;若a=017 二进制表示为00001111,右移两位即00000011,即十进制数11;第五章 选择结构程序设计
选择结构
1.if
(条件)
语句1;
2.if
(条件)
语句1;
else
语句2;
3.if
(条件1)
语句1;
else
if(条件2)
语句2;
else
if(条件3)
语句3;
…
else
语句n;
条件运算符:表达式(非零:真;零:假)
表达式1?表达式2:表达式3
a?b:c
a为真 == b
a为假 == c
关系运算符
< <=
>=(优先级相同,高)
==
!= (优先级相同,低)
逻辑运算符
! (逻辑非) &&(逻辑与) ||(逻辑或)
短路
a&&b&&c
a为假,b,c不参与运算;a为真,b为假,c不参与运算
a为真,b为真,c参与运算
a||b||c
a为真,b, c不参与运算;a为假,b为真,c不参与运算
a为假,b为假,c参与运算
switch
switch
(表达式(整型或字符型或枚举))
{
case
常量表达式1:
语句1
break;
case
常量表达式2:
语句2
break;
case
常量表达式3:
语句3
break;
…
default:
语句n;
break;
}
第六章 循环控制
goto语句:无条件跳转语句
放在任何一行代码前,后跟“:”
与if(条件跳转)语句一起构成循环结构
用途是从多层循环的内层循环跳到外层循环外
【不提倡使用】
while语句:先判断后循环
while(条件)
使用不恰当的数据类型容易出现死循环,这块分为两个问题。
1,死循环
例如:
char c=1;
int s=0;
while(c<151)
s+=c++;
因为c是char型数据,所以取值范围为-128~127,而c的初值为1,当执 行while语句时根本加不到151,所以是死循环。
2,伪死循环
例如:
int i=0;
while(i<100)
{
i–;
}
I是int型数据,取值范围为-2147483648~2147483647,I的初值是1,1<100成立,执行
i --,当i减到-2147483649时,其实是2147483647,所以i >100,循环结束。
do…while语句 :先循环后判断
循环体无论如何都循环一次
for循环
for语句:for(表达式1,表达式2,表达式3)
{
表达式4;
}
执行