算术操作符
/ % * + -
算术操作符中,除号两边都是整数时,默认计算结果为整形。若要计算结果为浮点型,需至少将/ 运算符两边的其中一个数(类型)改为浮点型。
% 运算符两边两个操作数都必须是整数。
在没有括号的情况下,相邻两个运算符乘除(/ *)优先于加减(+ -)。(注意相邻)
以下代码为问题代码(即会出现歧义的代码):
c + --c;
a *b + b * d+ e *f; (取决于哪个变量先准备好)
fun() + fun () + fun (); (不能确定先调用哪个函数)
移位操作符 (作用于二进制位)
<<
左移规则:左边抛弃,右边补0;
右移规则:1.逻辑移位:左边补0,右边抛弃。2.算术移位:右边抛弃,左边补符号位(多用)。
?有一问题未解:
int i ;
int n;
for (i = 31;i > 0; i -= 2)
{
printf("%d",(n>>i) & 1);
}
循环中右移31位,再右移29位,抛弃的位数还能找回吗?
位操作符
& | ^ (二进制位数之间的按位与 ,按位或,按位异或)
& 任何数(n >>1)& 1 就可以得到 它的第i位二进制数(从右向左)
| 少用待发
^ 如下代码:
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
这样就可以不用设置参数实现两个数值的互换;第一个a ^ b的值相当于a和b之间的钥匙,凭借他与其中一个数异或可以得到另外一个数;a ^ a = 0;a ^ 0 =a.
赋值操作符
可以初始化变量,也可以给变量重新赋值。
int a = 0;
a = 10;
复合赋值符
+=;-=;*=;/=;%=;>>=;<<=;&=;|=;^=.
他们都是缩写。如a +=10同意为a= a +10;
单目操作符
! + - (正负号) &(取地址) sizeof(不是函数) ~ – ++ *(解引用操作符 ) ()强制类型转换
if (!1)
对于数组(以arr1为例),一般情况下数组名是首元素地址,两种情况例外:&arr1;sizeof(arr1).
*在指针中位指针语法,表示定义的变量位指针变量。
()用法:int a = (int) 3.14.强制转换浮点型变量为整型,即a = 3.
关系操作符< >= <= != ==
用于条件语句。补:操作符和变量之间,加空格隔开。
逻辑操作符
&& ||
&&(逻辑与)。!注意:(0 && 1 && 2),(1 || 0 || 2);当判断条件中逻辑与第一条语句为假时,不再执行后面的语句。当逻辑或第一条语句为真时,不在执行后面的语句。
唯一一个三木操作符 exp1? exp2 :exp3.
举例:a > b? a : b;表示如果a > b为真,输出a的值,如为假,输出b的值。
逗号表达式
(exp1,exp2,exp3,…,expn)
逗号表达式从左向右依次执行,但是逗号表达式的值只取决于最后一个表达式。
下标引用操作符[]
arr[i]等效于i[arr],因为计算机内部计算arr[i] 为 (p + i).(i[arr]为((i + p)),两者等效。