22/5/8学习笔记(Part 8)
算数操作符 + - * / %
- 除%以外,其他四个操作符可用于整数和浮点数。
- 算数操作符 / 的用法:分子/分母。如果 / 两边都是整数则执行整数除法,得到的也是整数,只要有浮点数则执行浮点数除法。
int a = 6.00;
int b = 2;
int c = a / b;
printf(“%d\n”, c);//得到的是3.00
- 算术操作符 % 的意义:整除后取余。%操作符的两个操作数必须为整数。
移位操作符 >> <<
移位操作符只能是整数。不能移动负数位。
移位操作符移动的是数据存储二进制形式中的比特位。
1 .<<左移操作符
规则:左边抛弃,右边补0。
2 .>>右移操作符
规则之一:逻辑移位:左边填0,右边丢弃。
规则之二:算术移位:左边填充符号位(若数值类型为unsigned int类型,则填0),右边丢弃。
即使已用移位操作符操作,但实际上没有对数值赋值的话,数值自身的值不会发生变化。
int a = 10;
a>>5;
printf("%d\n", a);//得到10
a<<6;
printf("%d\n", a);//得到10
int b = a>>3;
printf("%d\n", b);//得到1
int c = a<<9;
printf("%d\n", c);//得到5120
位操作符 &(按位与) 、 | (按位或) 、 ^(按位异或)
位操作符的操作数都必须是整数。
&按位与:两个位都为1时,结果才为1。即:有0则为0。
| 按位或:两个位都为0时,结果才为0。即:有1则为1。
^ 按位异或:两个位相同为0,相异为1。
赋值操作符
=、+=、-=、*=、/=、&=、^=、l=、>>=、<<=
其中x = x + 20,也可以写成 x += 20,其他同理。
注: == 是判断,=是赋值。
单目操作符

前置++:x= ++a; 先加减,再使用a。
后置++:x= a++; 先使用a,再加减。
关系操作符
.> 、>=、<、<=、!=(测试不相等)、==(测试相等)
逻辑操作符
&& 逻辑与
| | 逻辑或
1.要分清楚与位操作符:& 和 | 的区别。
2. | | 逻辑或:遇真则停。
3. && 逻辑与:遇假则停。

条件操作符
表达式1 ? 表达式2:表达式3
逗号表达式
表达式1, 表达式2, 表达式3,…表达式n
从左向右依次执行,整个表达式的结果是逗号表达式中最后一个表达式的结果。
下标引用、函数调用和结构成员
[ ] 下标引用:主要是在数组中实现,例如有一个int arr[10],需要调用第7个元素时,可以写:arr[6]。
( )函数调用:接收一个或者多个操作数。
. 的用法:结构体.成员名。
->的用法:结构体指针 -> 成员名。(在使用指针时常用到)
表达式求值

1.旨在各个不同的类型同时出现在表达式后,需要将其类型长度补充整齐而后进行加减运算。其中整型提升是按照变量的数据类型的符号位来提升的,负补1,正补0,无符号补0。算数转换也指的是其中低位的操作数需转换为另一个操作数的类型。以下为其层次体系:
longdouble
double
float
unsigned long int
long int
unsigned int
int
算数转换需要合理。
2.复杂表达式需要注意运算时候的优先级(谁优先于谁)、结合性(从左到右还是从右到左)和是否控制求值顺序。
3.如果写出的表达式不能通过操作符的属性确定唯一的计算路径,那么这个表达式就是存在问题的。
⭐题目
1.如何判断系统是逻辑右移还是算数右移?
2.不能创建临时变量(第三个变量),实现两个数的交换。
⭐答案
1.思维:用-1进行右移操作,-1在二进制中存储数据为32位-1(补码形式),若是进行逻辑右移,左边补0,得到的则为一个正数;若是进行算数右移,左边补符号位,得到的仍然是-1。
int main()
{
int a = -1;
int b = a >> 1;
if(a == b)
{
printf("算术右移\n");
}
else
printf("逻辑右移\n");
return 0;
}
2.该题中要了解到&、| 、^ 的特殊用法。
此题主要运用^ 的特殊用法:任何数异或自己=把自己置0。
代码如下:
int main()
{
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d b = %d\n", a, b);
return 0;
}
本文详细介绍了C语言中的算数、移位、位、赋值、单目、关系、逻辑、条件、逗号等操作符的用法,包括它们的规则、特点和实例。此外,还探讨了下标引用、函数调用、结构成员的使用以及表达式求值的注意事项。文章以学习笔记的形式,提供了一些练习题目和解答。

被折叠的 条评论
为什么被折叠?



