zoukankan      html  css  js  c++  java
  • C语言下的位运算

    简介

    程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算是直接对整数的二进制位进行操作,简便高效。

    下表列出了C语言的位运算符

    名称 运算符 含义
    按位与 a & b 仅1 & 1 == 1
    按位或 a | b 仅0 | 0==0
    按位异或 a ^ b 对应数位上的数相同为0,不同为1
    按位取反 ~a 0和1全部取反
    (注意有符号数和无符号数的区别)
    左移 a << b a乘以2的b次方
    带符号右移 a >> b 相当于a除以2的b次方(取整)
    位运算的简单使用
    • "&"运算常用于二进制取位操作
    num & 1;//取num的最后一位,可判断num的奇偶,远快于num mod 2
    num & 3;//取num最后两位
    
    • " | " 运算常用于二进制特定位上的无条件赋值
    num | 1;//把num最后一位变为1
    num | 1 -1;//把num最后一位变为0
    num | 0b100;//num第3为变为1
    
    • " ^ " 常用于对二进制的特定一位进行取反操作
      " ^ " 的意义 :是不是不一样
      0和1异或0都不变,异或1则取反
    num == num^a^a;//两次异或同一个数最后结果不变,可用于简单加密
    c=c^32;//若字母c大写则变为小写,小写变为大写//异或1取反
    int a,b;//不使用第三变量,位运算交换两个值
    a=a^b;
    b=a^b;//b==a
    a=a^b;//a==b
    
    • "~"运算是把内存中的0和1全部取反。需要注意整数类型是否是有符号数
    unsigned int num;//32bit
    num=100;
    num=~num;//num=2^32-1-num;无符号数取反得到的值是它与该类型上界的差
    -num=(~num)+1;
    
    
    无符号数与有符号数均满足
    unsigned char a;
    ~a+1 == -a;
    
    int num;
    -num=(~num)+1;
    

    ">>"表示把a转为二进制后左移b位(在后面添b个0)即乘以2^b

    "<<"表示把a转为二进制后右移b位 (去掉末尾b位) 即除以2^b取整

    将高频乘除法替换为位运算,一般可提高算法效率


    2018/5/20

  • 相关阅读:
    HTML5 Shiv – 让该死的IE系列支持HTML5吧(转)
    sql之left join、right join、inner join的区别
    一道JS的简单算法题
    逆波兰式计算字符串公式
    前端编程,语义化
    罗列各种排序Mark
    关于JS动画和CSS3动画的性能差异
    各种算法题MARK
    Html笔记【不定时更新】
    CSS3笔记【不定时更新】
  • 原文地址:https://www.cnblogs.com/kafm/p/12721867.html
Copyright © 2011-2022 走看看