C语言基础:
运算符:
位运算符:
说明:按位(bit) 来进行运算操作的运算符。
语法: ~ & | ^ << >>
~按位取反
结论:单目运算符,数据的每一个bit位取反,也就是二进制数位上的1变0,0变1。
举例:
unsigned char ret = ~0x05;// 0000 0101 --> 1111 1010
printf("%d\n",~5); // -6
&:按位与
语法: a & b
说明:首先将参与计算的操作数转换为二级制,然后按照每一位进行对齐,处理结果如下:
a:10101011
b:01010011
x:00000011
结论:如果我们前后两个操作数对齐位置上的二进制数字都是1,其结果是1,否则结果都是0
|:按位或
语法: a | b
说明:首先将参与计算的操作数转换为二级制,然后按照每一位进行对齐,处理结果如下:
a:10101011
b:01010011
x:11111011
结论:如果我们前后两个操作数对齐位置上的二进制数字只要有1,其结果是1,否则结果都是0
^:按位异或
语法: a ^ b
说明:首先将参与计算的操作数转换为二级制,然后按照每一位进行对齐,处理结果如下:
a:10101011
b:01010011
x:11111000
结论:不同为1,相同为0
<<:左移,按bit位往左偏移
1.有符号左移
//有符号左移
int b = -3 << 3;
printf("%d\n",b);
2…无符号左移
//无符号左移
unsigned int a = 3 << 3;
printf("%d\n",a);
截图:
>>:右移,按bit位往右偏移
1.有符号右移
//有符号右移
int d = -3 >> 3;
printf("%d\n",d);
2…无符号右移
//无符号右移
unsigned int c = 3 >> 3;
printf("%d\n",c);
截图:
注意
- 在进行移位运算的时候,凡是被移出去的位统统丢弃,凡是空出来的位统统补0。移位运算针对的
是无符号整数.
- 如果非要进行有符号的移位运算,那么左移的时候,空出来的补0,右移的时候,空出来的补符号
位(原码阶段)
其他运算符:
赋值运算符:
包含: = ,由 右 -> 左,优先级排倒数第二。
int a = 4;
int num = 5 +6;
注意:赋值运算符的左边(左操作数)必须是可写的地址。
复合赋值运算符
包含: += -= *= /= %= ,由 右 -> 左,优先级倒数第二。
int i = 1;
i+=1; // 等价于 i = i+1
i*=5; // 等价于 i = i * 5
三目运算符
语法: 表达式1?表达式2:表达式3 ,其实就是if…else…简化版
求值顺序:
如果表达式1的值为1,则整个条件运算表达式的值为表达式2的值;
如果表达式1的值为0,则整个条件运算表达式的值为表达式3的值;
// 案例1
// 需求:根据考试成绩进行奖励和惩罚
// score >= 90 奖励
// score < 90 惩罚
int score = 89;
printf("%s",score >= 90 ? "奖励":"惩罚"); // 惩罚
// 案例2
int a = 10,b = 20;
int ret = a>b?++a:++b;
printf("ret:%d a:%d b:%d",ret,a,b);// ret=21,a=10,b=21
练习
- 使用三目运算符比较三个任意整型数的最大值?
sizeof(int)
说明:用来计算某种类型或者变量所占的字节数。(中文英文字符集问题,不标准)
逗号运算符(,)
说明:优先级最低,左->右,由多个运算符将多个不同的式子连接起来的表达式称之为逗号表达式
语法:
(表达式1,表达式2...表达式n);
求值顺序:先求表达式1,再求表达式2,以此类推,整个逗号表达式的值为表达式n的值。
注意:
- 逗号表达式的优先级最低
- 运算顺序从左往右
- 整个逗号表达式的值取决于最右边的表达式的值
举例:
int a = 5,b = 3;
int ret = (a>b,a++,b++,a);// 这种写法其实就是为了减少代码量
printf("ret:%d\n",ret);
优先级的顺序
C语言程序设计结构:
C语言设计的核心(灵魂)
程序 = 数据结构 + 算法
算法:对于问题解决的方法思路或者步骤
算法的特征:
有穷性:问题需要在有限的步骤内完成
可行性:解决步骤和方法思路必须要切实可行
确定性:每一个代码指令要有明确的功能含义
算法的描述:流程图
C语言程序设计的设计结构
三大结构:顺序结构、分支(选择)结构、循环结构
顺序结构
说明:各操作是按先后顺序执行的。是最简单的一种基本结构。这个也是默认的结构。
选择结构
说明:又被称之为分支结构,根据条件是否成立,选择对应的操作。
循环结构
说明:又被称之为重复结构
当型循环
特点:先判断条件,后执行语句,语句可能一次也得不到执行
直到型循环
特点:先执行语句,后判断条件,语句至少执行一次
C语言的语句
分类
控制语句:while… for… if…else… …
函数调用语句:scanf(…);
表达式语句:b=3;
空语句:;
构。这个也是默认的结构。
选择结构
说明:又被称之为分支结构,根据条件是否成立,选择对应的操作。
循环结构
说明:又被称之为重复结构
当型循环
特点:先判断条件,后执行语句,语句可能一次也得不到执行
直到型循环
特点:先执行语句,后判断条件,语句至少执行一次