操作符:
算术操作符:+ - * / %
%在这里叫“模”,取余数
9/2,取mo的话,
输入int a =9%2; 余数为1
float a = 9/2
printf(“%f\n”,a);
结果为4.00000
想要结果为4.5则float a=9/2.0;
位操作符: &按位于 |按位或 ^按位异或
移位操作符:>> <<
赋值操作符: =、+=、-=、*=、/=、&=、^=、>>=、<<=
单目操作符:只有一个操作数
a+b;其中的加号有两个操作数,即a,b
+就是双目操作数。
!感叹号就是单目操作符:
int main()
{
int a = 10;
printf("%d\n", !a);
return 0;
}
//0表示假,非0就是真
//10是非0,即真。感叹号就是把真变成假
//如果a=0,!输出的结果a就是1
以下为实际操作的应用
if (a)
{
//如果a为真,xx
}
if (!a)
{
//如果a为假,xx
}
sizeof是一个操作符,不是函数。用来计算类型或变量的大小
int main()
{
int a = 10;
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(a));
return 0;
}
2.~ 对一个数的二进制取法:把所有二进制中数字1变成0,0变成1(~是按位取反不管符号位,都变)
一个整数的二进制表示有3种:原码(直接写出来的二进制数)、反码、补码。整数在内存中存储的是补码。符号位是最高位,1为负数,0为正数。
int main()
{
int a = 0;
printf("%d\n", ~a);
return 0;
}
//0的二进制是32个0,即:0000000000000000000000000000
//~a就是32个1,即:11111111111111111111111111111111
//-1(负数)的原码:(最高位的1是符号位,表示负数)10000000000000000000000000000001
//反码:(符号位不变,剩下的位1变0,0变1)11111111111111111111111111111110
//补码:(符号位不变,其他全部取反,末位加1)11111111111111111111111111111111
//正整数:原码、反码、补码相同
负数:
原码—反码:符号位不变,其他位取反
反码—补码:反码+1
正整数:原码、反码、补码相同
3.-- 前置,后置--
int main()
{
int a = 10;
int b = ++a; //前置++
printf("%d\n", a);
printf( "%d\n",b );
return 0;
}
4.++ 前置,后置++
int main()
{
int a = 10;
int b = a++; //后置++
printf("%d\n", a);
printf( "%d\n",b );
return 0;
}
++就近原则:看赋值靠近谁
前置++:a是先++,后使用。比如:例子中的++a先++就是10+1=11。先赋值后运算,b=11,a也是11
后置++:是先使用a,再++。
5.类型转换:强制类型转换
int main()
{
int a = 3.14;
printf("%d\n", a);
return 0;
}
//ctrl+f7会出现一个warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据
int main()
{
int a = (int)3.14;
printf("%d\n", a);
return 0;
}
//添加int强制类型转换
逻辑操作符:
- && 逻辑与(且,两个都为真,结果为真)
- || 逻辑或(或,两个都为假,结果为假)
int main()
{
int a = 3;
int b = 5;
int c = a && b;
printf("%d\n", c);
return 0;
}
//3,5都是非零,为真;&&两边都是真,所以printf结果的1为真,0为假;
//&&:并且(里面只要有一个为假,结果就为假;两个同时为真,结果才是真;)
//||:或(里面有一个为真,结果就是真;两个同时为假,结果为假;)
条件操作符(三目操作符):
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;
}