C 语言 运算符 全网最全整理

C 语言 运算符 全网最全整理

码字不易,对你有帮助 点赞/转发/关注 支持一下作者

微信搜公众号:不会编程的程序圆

看更多干货,获取第一时间更新

思维导图


目录


正文


一 算数操作符

+

-

*

/

%: % 左右两边的数必须都为整数

二 移位操作符

>> : 右移

<<: 左移

例1:b = 20

例2:b = -4

img

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-APrIn3AF-1585038906075)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

注意1:

左移直接在空的地方补0 如例1

右移有两种情况:

1.逻辑位移 补0

2.算数位移 补1 如例2(一般都是这种情况)

注意2:

移位操作符,不要移动负数位,这是标准未定义。

如:num >> -1//error

三 位操作符

& (按位与) | (按位或) ^(按位异或)

例3:按位与

img

例4:按位或

img

例5:按位异或

img

例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

五 复合赋值符

+= -= *= \= %= >>= <<= &= |= ^=<

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值