刷题(4)-位运算(1)总结

41 篇文章 0 订阅
7 篇文章 0 订阅

一. 位运算

主要看一,二章

位运算总结

  • 十/二进制互相转换
    • 十进制->二进制  
      • 正数:正常, 除2取余 除2取余
      • 负数: 补码 (先把它当成正数算2进制,然后各位取反,再+1) -1的补码全是11111
    • 二进制->十进制  
      • 正数:正常 ,  2的n次方 
      • 负数:同样 各位取反 ,再+1, 然后算十进制,最后加个负号 (连着符号位都取反,因为正数必带符号位0)
  • 符号位:
    • 最高位, 正数:0, 负数:1
    • 对于 k 位整数,有符号整数的取值范围是 【-2的k-1次方, 2的k-1次方 -1 】

    • 无符号整数的取值范围是 【0,2的k次方 -1】 
       

  • 位运算共有 6 种,分别是:与、或、异或、取反(非)、左移和右移

    & |   ^(按位异或 相同为0 不同为1)   ~   <<  >>

    移位运算按照移位方向分类可以分成左移和右移,按照是否带符号分类可以分成算术移位和逻辑移位。

    左移运算的符号是 <<。左移运算时,将全部二进制位向左移动若干位,高位丢弃,低位补 00。对于左移运算,算术移位和逻辑移位是相同的。

    右移运算的符号是 >>。右移运算时,将全部二进制位向右移动若干位,低位丢弃,高位的补位由算术移位或逻辑移位决定:

    算术右移时,高位补最高位也就是符号位;

    逻辑右移时,高位补 0。

  • 对于 C/C++ 而言,数据类型包含有符号类型和无符号类型,其中有符号类型使用关键字 signed 声明,无符号类型使用关键字 unsigned 声明,两个关键字都不使用时,默认是有符号类型。对于有符号类型,右移运算为算术右移;对于无符号类型,右移运算为逻辑右移。

  • 将一个数左移 k位,等价于将这个数乘以 2^k。而将一个数右移k位,对于0和正数是等价于将这个数除以2^k次方, 但是对于负数不成立。

  • 位运算的优先级很低 切记,所以关于位运算最好都套个()

  • 重要的性质

    • -1 是11111111, 0是000000,  最小整数是 1000000

  •  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值