C 语言 运算符 全网最全整理
码字不易,对你有帮助 点赞/转发/关注 支持一下作者
微信搜公众号:不会编程的程序圆
看更多干货,获取第一时间更新
思维导图
目录
文章目录
正文
一 算数操作符
+
-
*
/
%
: % 左右两边的数必须都为整数
二 移位操作符
>>
: 右移
<<
: 左移
例1:b = 20
例2:b = -4
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-APrIn3AF-1585038906075)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
注意1:
左移直接在空的地方补0 如例1
右移有两种情况:
1.逻辑位移 补0
2.算数位移 补1 如例2(一般都是这种情况)
注意2:
移位操作符,不要移动负数位,这是标准未定义。
如:num >> -1//error
三 位操作符
&
(按位与)|
(按位或)^
(按位异或)
例3:按位与
例4:按位或
例5:按位异或
例6:异或的应用——交换两个值的内容
方法1:
int a,b,c;
c = a;
a = b;
b = c;
方法2:(如果a,b很大可能会溢出)
int a,b;
a = a + b;
b = a - b;
a = a - b;
方法3(异或法):
int a, b;
a = a^b;
b = a^b;
a = a^b;
例7:怎么求一个二进制位中1的个数
#include<stdio.h>
int CountOneBit(unsigned int n){//解决负数无法计算问题,这种运算运算的是补码
int count = 0;
while(n){//类比十进制中每位数的求法
if(n%2 == 1)
count++;
n/=2;
}
return count;
}
int main(){
int n = 0;
int num_1 = 0;
printf("请输入一个数:");
scanf("%d",&n);
num_1 = CountOneBit(n);
printf("%d的二进制序列中有%d个 1",n,num_1);
}
unsigned的作用:
unsigned就是将这个二进制数最高位的符号位变成计数位。下面我们举个例子帮大家理解一下
如果我们输入的是-1
-1%2 == -1
-1/2 = 0
这样输出的count为0
但是我们知道-1的补码是11111111111111111111111111111111
这样我们的代码就局限在正整数
如果加上unsigned 虽然我们输入的是-1 但是程序计算是是按照 unsigned int 的最大值,这样就避免了这个问题
更多位运算相关示例: https://github.com/hairrrrr/linux.ccode/tree/master/Bit/ClassCode/2020-1-7%EF%BC%888%EF%BC%89
四 赋值操作符
=
a = b = c
它的意义是将c的值赋给b,再将b的值赋给a。其实这样理解不够准确,其实应该这么写:
a = (b = c)
先将c的值赋给b 然后将这个整体,即b的值赋给a
五 复合赋值符
+= -= *= \= %= >>= <<= &= |= ^=<