设为首页 加入收藏

TOP

C/C++位操作初步(三)
2014-04-06 17:35:32 来源: 作者: 【 】 浏览:250
Tags:C/C ++位 操作 初步

 

  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

  逻辑运算符组合

  假设读者熟悉普通代数与布尔代数,下面是部分常见的涉及到加法、减法与逻辑运算符的组合:

  a. -x=~x+1

  b. =~(x-1)

  c. ~x=-x-1

  d. -~x=x+1

  e. ~-x=x-1

  f. x+y=x-~y-1

  g. =(x^y)+2(x&y)

  h. =(x|y)+(x&y)

  i. =2(x|y)-(x^y)

  j. x-y=x+~y+1

  k. =(x^y)-2(~x&y)

  l. =(x&~y)-(~x&y)

  m. =2(x&~y)-(x^y)

  n. x^y=(x|y)-(x&y)

  o. x&~y=(x|y)-y

  p. =x-(x&y)

  q. ~(x-y)=y-x-1

  r. =~x+y

  s. ~(x^y)=(x&y)-(x|y)-1

  t . =(x&y)+~(x|y)

  u. x|y=(x&~y)+y

  v. x&y=(~x|y)-~x

        

首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++中的Virtual Function&nb.. 下一篇LuaBridge为Lua绑定C/C++对象

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言指针从入门到基 (2025-12-26 05:21:36)
·【C语言指针初阶】C (2025-12-26 05:21:33)
·C语言指针的定义和使 (2025-12-26 05:21:31)
·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)