操作符详解:
首先贴一张自己制作的思维导图
移位操作符:(箭头指向哪边向哪边移)
<< :左移操作符
作用:将保存的数据二进制位(补码)向左移动
具体用法:左边抛弃,右边补零。
.>>:右移操作符
作用:将保存的数据二进制位(补码)向右移动
具体用法:右移操作符分为算数移位和逻辑移位
算数移位:右边抛弃,左边补原来的符号位(计算机采用算数移位);
逻辑移位:右边抛弃,左边直接补零,不考虑符号位。
注意:1.对一个数移位操作完成后,当前的数字不会改变,除非把它赋给另一个变量。
2.移位操作不能移负数位。
int main()
{
int i = 10;
int num = 0;
int value = 0;
num = i >> 1;
value = i << 1;
printf("%d\n", num);
printf("%d\n", value);
printf("%d\n", i);
system("pause");
return 0;
}
输出结果:5 ;20; 10
左移操作符相当于给之前的数乘2n(n为移动n位);
右移操作符相当于给之前数除2n;
位操作符:
&:按位与
|:按位或
^:按位异或
注意:1.位操作符的作用对象也是一个数的补码,并且操作数必须为整数,浮点数的存储方式与整数不同。
方法:针对存储数据补码
'&'同1为1,否则为0;
‘|’同0为0,否则为1;
‘^’相同为0,相异为1;
单目操作符:
单目操作符的种类在思维导图中已经列出,这里讲几个需要特别注意的。
- ’!‘逻辑取反,任何非零的数逻辑取反都为0;c语言中规定0为假;其他的非零数均为真。
- sizeof是操作符并不是函数,sizeof计算变量所占空间字节大小,若sizeof计算字符串的大小包含’\0‘,而strlen(函数)计算字符串长度不包含’\0’。sizeof(a+b)里面的表达式不参与计算,若a,b都是int类型,输出结果将是4;这说明sizeof计算大小在编译期进行。
- sizeof若在主函数内求数组大小,即:sizeof(arr)是计算整个数组的大小,而sizeof在函数中计算sizeof(arr)输出为4(32位系统);因为函数名经函数传参降为了指针,此时arr为数组首元素地址。
- 前置++,后置++
如:a++是先使用再加加;先执行语句直到遇到’;‘再自加。
++a是先加加再使用。
减减同理
int main()
{
int i = 2;
int a = 0;
int b = 0;
a = ++i;
b = i++;
printf("%d %d", a, b);
system("pause");
return 0;
}
输出结果为3,3
a是将i自加后赋值给a;
b是将i的值赋给b后,i再进行自加;
关系操作符:
关系操作符种类已在思维导图中列出,这里需要特别注意的是,不要将赋值操作符‘=’和判断相等(==)搞混
逻辑操作符:
&&:逻辑与
||:逻辑或
不同于按位与和按位或。
条件操作符:
exp1?exp2:exp3
用法:exp1为真,结果输出exp2,否则输出exp3.
逗号表达式:
exp1,exp2,…,expN
用法:从左到右依次执行,整个表达式的结果是最后一表达式的结果
int main()
{
int i = 0;
int j = 1;
int m = 10;
int n = (i > j, j = i, i = j - 1, m);
printf("%d ", n);
system("pause");
return 0;
}
输出结果为10;
下标引用,函数调用和结构成员:
[ ]:数组下表引用操作符,操作数:数组名+索引值
():函数调用操作符,操作数:函数名和函数参数
.:访问结构体成员; ->:同样也是结构体访问操作符与‘.’不同的是->是和指针配合使用的。
若有问题希望能够指出来。