常用的位运算

原文链接
https://www.acwing.com/blog/content/873/
https://blog.csdn.net/m0_37345402/article/details/77429245

  1. 右移运算符 (需要移位的数字 >> 移位的次数)
    将需要移位的数字转化成二进制,将转化完的数字整体向右移动对应位移位数,低位舍弃,高位的空位补符号位(正数补零,负数补1)。
    例:12 >> 2
    12的二进制为1100,将1100整体右移两个单位,因为12为正数,高位填零,变成0011,是十进制中的3.
    12>>1就是除以2, 12>>2就是除以4

  2. 左移运算符 (需要移位的数字 << 移位的次数)
    将需要移位的数字转化成二进制,将转化完的数字整体向左移动对应位移位数,高位舍弃,低位的空位补0.
    例:5<<2
    5的二进制为0101,将0101整体左移两个单位,低位补0,得10100,十进制中的20。
    在进行移位的时候,可能存在溢出问题。

  3. /——除法
    结果=被除数/除数
    被除数 除数 结果
    浮点数 浮点数 浮点数
    浮点数 整数 浮点数
    整数 整数 整数
    整数 浮点数 浮点数

    注:5/2的值为2(整除),而用(double)5/2的值则为2.5。
    5%2=1(取余)

  4. >>/的区别:

    1. 操作对象类型不同
      >>只有整数才能使用
      /整数和浮点数都能够使用。
    2. 运算效率不同
      通常情况下,右移操作比整数除法快。但涉及到浮点数的除法速度是最慢的。
    3. 优先级不同
      >>/的优先级低,两者同时参与运算,先计算乘除,后计算左移或右移。


n&1 与运算 可以判断n是否为偶数 如果是偶数,n&1返回0;否则返回1,为奇数

关于位运算符
1.int 上限为2^31-1,无穷大的数可以设置为(1<<31)-1(加括号因为位运算符优先级低于算术运算符)

更常用的是2^30-1,可以避免相加超过int的情况。

const int INF=(1<<30)-1;

const int INF= 0x3fffffff;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值