今天学操作符
操作符有算数操作符:+-*/%
移位操作符:<< >>
位操作符:&按位余 |按位或 ^按位余或
赋值操作符:*=等
单目操作符
开始演示,代码如下
int main()
{
int a = 9 / 2;
printf("%d\n", a);
return 0;
}
这里9除以2并非4.5,首先打印后面的%d是打印一个整数,这里得换成%f,然后int a是把a设定为了整数,这里得换成float,注意,到这也没有结束,9/2这个公式会被默认为整数除法得到的也是除法,所以把分子分母中任意一个数换成浮点数就可以变成浮点数除法,代码如下
int main()
{
float a = 9 / 2.0;
printf("%f\n", a);
return 0;
}
打印结果如下
%操作符是取余数
<<移位操作符其实就是把二进制位移动一位的操作,比如2的二进制是00010,左移后变成00100,这个十进制就是4。代码与结果如下
单目操作符,比如a+b的+有两个操作数,叫双目操作符。单目操作符就只有一个,比如!
int main()
{
//0表示假,非0表示真,!取反就是把真变成假,假变成真
int a = 10;
printf("%d\n", !a);
return 0;
}
经典用法为
int main()
{
if(a)
//如果a为真,如何如何
if(!a)
//如果a为假,如何如何
return 0;
}
int main()
{
int arr[10] = { 0 };
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr[0]));
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d\n", sz);
return 0;
}
得到如下
这是sizeof操作符的应用。
~是按位取反,按二进制位取法,把所有二进制位中数字,1变0,0变1.整数在内存中存储的是补吗,一个整数的二进制表示有三种:原码、反码、补码。
针对负数计算如下,比如-1:
原码:10000000000000000000001(第一位符号位加上31位2进制数)
反码:11111111111111111111110(除符号位全取反)
补码:11111111111111111111111(反码的二进制序列+1)
针对正整数,原码,反码,补码相同。
int main()
{
int a = 0;
printf("%d\n", ~a);
return 0;
}
得到结果如下,也可推算,0的二进制位为00000000000000000000000000000000(32个0),取反为11111111111111111111111111111111.这是-1的补码,所以0做~后得到-1.
++和--操作符的应用。
前置++:先++后使用。
后置++:先执行b=a,再执行a++操作。
&& 逻辑与
|| 逻辑或
0为假,a和b同时为真,则a&&b为真,真&&真=真,真&&假=假。
或||则是,真||假=真,假||假=假。
条件操作符(三目操作符)
exp1?exp2:exp3
exp1如果成立,exp2计算,整个表达式的结果是exp2的结果
exp1如果不成立,exp3计算,整个表达式的结果是exp3的结果
代码演示如下
int main()
{
int a = 0;
int b = 3;
int max=0;
max=a > b ? a : b;
printf("%d\n", max);
return 0;
}
运行结果如下
逗号表达式:依次执行,隔开的操作
下标引用操作符:如arr[10],引用时arr[5]这个[]
函数调用操作符,比如printf()的()