操作符
算数操作符
+ - * / %
加 减 乘 除 取模、取余数
移位操作符(移二进制位)
<< >>
左移 右移
例
int b=a<<2; //使左移后遵从“左边丢弃,右边补0”规则变
输出变为了2
位操作符(2进制位操作)
& | ^
按位与 按位或 按位异或
按位指对应二进制位置与判断一下,其中1代表对,0代表错
异或的计算规律:对应的二进制位相同,则为0,不同则为1
(复合)赋值操作符
= += -= *= /= &= ^= |= >>= <<=
例:a=a+10相当于a+=10;
a=a-10相当于a-=10;
a=a&2相当于a&=2,,,,,,
单目操作符
!逻辑反逻辑的例子:
int main()
{
int a=10;
printf("%d\n",a);
printf("%d\n",!a);
return 0;
}
此时输出是第一个为10,第二个是0(表示假)
sizeof的使用方法
int main()
{
int a=10;
int arr[]={1,2,3,4,5,6}; //初始化数组
printf("%d\n",sizeof(a)); //输出为4(字节)
printf("%d\n",sizeof(int)); //4
printf("%d\n",sizeof a); //4
printf("%d\n",sizeof(arr)); //计算数组大小,单位为字节,结果为(4*6=24)
printf("%d\n",sizeof(arr)/sizeof(arr[0])); //计算数组中元素个数
return 0;
}
所以sizeof是操作符,而不是函数,所以sizeof int是不可以的。
以及要注意int arr[]中的int限制的是arr中元素类型为int,而数组有自己的类型是int[6]
~的使用方法
int main()
{
int a=0; //1个字节,32bit位
int b=~a; //按(二进制)位取反,就原来10100,取反就01011
printf("%d\n",b); //结果为-1,十一点,打印的是这个数的原码
}
原码、反码、补码的概念
(负数2在内存中存储的时候,存储的是二进制的补码,而因为b是有符号的整形,所以其二进制代码的最高位是符号位,0是正,1是负,所以现在b是用的补码)
负数里原码符号位不变,其他位按位取反是反码;
反码+1得到补码;
1.负数的例子:
补码:11111111111111111111111
反码:11111111111111111111110
原码:10000000000000000000001
2.正数补码反码原码都一样
++的使用方法
int main()
{
int a=10;
int b=a++; //后置++,指先把a赋给b,然后a再自增
printf("a=%d\nb=%d\n",a,b); //结果为a为11,b为10
}
int main()
{
int a=10;
int b=a++; //前置++,指先把a自增,然后把a赋给b
printf("a=%d\nb=%d\n",a,b); //结果为a为11,b为11
}
(类型)的使用方法
int main()
{
int a=(int)3.14; //指强制把3.14转换为()内的类型
return 0;
}
双目操作符
三目操作符
关系操作符
> >= < <= != ==
大于 大于等于 小于 小于等于 不等于 等于
逻辑操作符
&& ||
逻辑与 逻辑且
例:
int main()
{
int a=3;
int b=5;
int c=a&&b;
printf("c=%d\n",c); //结果为1(真)
return 0;
}
条件操作符
exp1?exp2:exp3;
指表达式1的结果如果为真,则执行表达式2,整体的结果也为表达式2的结果,
如果为假,则执行表达式3,整体的结果也为表达32的结果
例:
int main()
{
int a=10;
int b=20;
int max=0;
max=(a>b?a:b);
return 0;
}
逗号表达式
exp1,exp2,exp3,,,,,,expN
下标引用,函数调用和结构成员
[] () . ->
int main()
{
int arr[10]={0};
arr[4]; //这里的[]就是下标引用操作符
}
int Add(int x,int y)
{
int z=0;
z=x+y;
return z;
}
int main();
{
int a=10,b=20;
int sum=Add(a,b); //这里的()就是函数调用操作符
return 0;
}