算数操作符
+ - * /
1 .对于除法来说,操作符两侧为整数,执行整数除法,有小数舍去,而只要有浮点数则执行浮点数除法
printf("%f", 5 / 2.0);
此时%d改为%f,输出结果为2.500000
2 %操作法两侧必须为整数
移位操作符
<<左移操作符
>>右移操作符
左移和右移移动的均为存储在内存中的二进制数的补码,整数的二进制数有原码,反码,补码,正数的原反补码相同,负数需计算
左移操作符
int a=5;
int b = a << 1;
printf("%d", b);
整数是4个字节,32比特位,所以a的存储为00000000000000000000000000000101
左移操作符:左边丢弃,右边补0,a<<1,即向左移1位
即b内存存储为00000000000000000000000000001010
b为10
右移操作符分两种
算术右移:右边丢弃,左边补原来的符号位
逻辑右移:右边丢弃,左边补0
一般电脑为算术右移
int a=5;
int b = a >> 1;
printf("%d", b);
a的存储为00000000000000000000000000000101
a进行操作后得到b的存储为00000000000000000000000000000010,
即b为2
小结:0的左移右移均为0
正数左移为乘以2的移位数次方,3左移3,即3乘以2的3次方,3乘以8为24,正数右移即为除以2的移位数次方,小数约去
负数左移为乘以2的移位数次方,负数右移即为除以2的移位数次方,小数部分转化为-1加上原先整数部分,有一例外为-1右移均为-1
位操作符
int a = 3;
int b = 5;
int c = a&b;
int d = a | b;
int e = a^b;
& ——按位与
a的二进制00000000000000000000000000000011
b的二进制00000000000000000000000000000101
上下依次对应均为1时为1,否则为0
c的内存存储为00000000000000000000000000000001
所以c为1
|——按位或
上下依次对应有1时即为1,否则为0
d的内存存储为00000000000000000000000000000111
所以d为7
^ ——按位异或
上下相同为0,不同为1
e内存存储为00000000000000000000000000000110
即e为6
将a和b两个数不使用第三个变量交换两个数的值可使用异或操作符
int a = 3;
int b = 5;
a = a^b;
b = a^b;
a = a^b;
复合操作符
+=
a+=5 意思即为a=a+5
(还有很多,表达的意思相同)
单目操作符
! 逻辑反操作
~ 对一个数的二进制数按位取反
sizeof 计数操作数的类型长度,以字节为单位
* 间接访问操作符(解引用操作符)
() 强制类型转换
& 取地址操作符
sizeof需注意两点
sizeof(数组名) 数组名表示整个数组的地址,sizeof计算的是整个数组的大小
另外sizeof()括号中的表达式计算完以后只对sizeof起作用,对后续是没有影响的
int a = 3;
int b = 5;
int c = 2;
printf("%d\n", sizeof(c = a + b));
printf("%d", c);
此时输出的c依然为2
逻辑操作符
&& 均为真最后结果才为真
||有一个结果为真即为真
对于&&操作符,左边如果为真,右边不再计算
三目操作符
exp1 ? exp2 : exp3
当exp1的计算结果为真,结果为exp2的计算结果
exp1的计算结果为假时,结果为exp3的计算结果
逗号表达式
exp1,exp2,exp3,…expn
从左到右依次计算,整个表达式的最后结果为最后一个表达式的结果
转载:https://blog.csdn.net/qq_51419689/article/details/114241976