zoukankan      html  css  js  c++  java
  • C语言常用基础位操作

    1、使用下面的代码将最右边的1改变为0,假如没有1则结果为0(e.g.,01011000=>01010000):

      x &  (x-1)

    此代码可以用来判断一个无符号的整数是否为2的幂,假如x & (x-1)==1,则x为2的幂,否则x不为2的幂

    2、相似地,下面的代码可以用来判断一个无符号的整数是否具备2n-1的格式(包括n=0、1)

      x & (x+1)

    3、下面的代码将隔离最右边的1,假如右边没有1则结果返回0 (e.g., 01011000 =>00001000):

      x & (-x)

    4、下面的代码将隔离最右边的0,假如右边没有0则结果返回0 (e.g., 10100111 =>00001000):

      ~x & (x+1)

    5、下面的代码都可以用来产生一个掩码,用来保留尾部的0,假如x=0则返回全1字节 (e.g., 01011000 =>00000111):

      ~x & (x-1)  或  ~(x | -x)   或  (x & -x)-1

    6、下面的代码用来产生一个掩码,用来保留最右边的1与尾部所有的0,假如x=0则返回全1字节(e.g., 01011000 =>00001111):

      x ^ (x-1)

    7、下面的代码用来将最右边的1右边的0全部改为1,假如x=0则返回全1字节(e.g., 01011000 = >01011111):

      x | (x-1)

    8、下面的代码将最右边的1临近的1取反 (e.g., 01011000 =>01000000):

      ((x | (x-1))+1) & x

  • 相关阅读:
    jdk动态代理底层实现
    spring-FactoryBean
    大型网站技术架构 核心原理与案例分析 pdf
    实战JAVA虚拟机 JVM故障诊断与性能优化 pdf
    《实战Java高并发程序设计》pdf
    mysql-注意点
    Json入门
    inflate, findViewById与setContentView的区别与联系
    提高编程能力的7条建议
    JDBC之一:JDBC快速入门
  • 原文地址:https://www.cnblogs.com/cpoint/p/3367381.html
Copyright © 2011-2022 走看看