ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

位运算(状压DP基础)

2022-02-15 11:04:07  阅读:145  来源: 互联网

标签:运算 二进制 状压 11010 11011 取反 变成 DP


          运算符号

一.含义

含义 c++
按位与 a&b
按位或 a|b
按位异或 a^b
按位取反 ~a
左移 a<<b
右移 a>>b

 

 

 

 

 

 

 

 

1.&运算(and)

  同真则为真,不同则为假。

  常用于二进制的取位操作。

  a&1的结果就是a二进制的最末位

2.|运算(or)

  有真则为真,同假则为假。

  通常用于二进制特定位上的无条件赋值。

  a|1即把a二进制末位强行变成1,

  若需要把二进制末位变成0,则x|1再减1即可,其实际意义就是把这个数强行变成最接近的偶数。

3.^运算(xor)

  不同则为真,相同则为假。

  1,a^0=a,

  2,a^a=0,

  3,a^b^b=a,

  4,a^b=b^a,

  5,a^b^c=a^(b^c)=(a^b)^c;

4.~运算(not)

  a=~a表示将a二进制中的1全部变成0,0全部变成1

  对无符号整数类型使用,得到的值便是它与该类型上界的差。

5.<<运算(shl)

  a<<b即将a的二进制左移b位(低位用0补齐),但高位超出类型限制的便会自动踢出,使用时要注意有符号类型的最高位为符号位。

6.>>运算(shr)

  a>>b即将a的二进制右移b位(高位除符号位用0补齐),低位自动踢出。

二.优先级

优先级别 运算符
1 ~
2 <<,>>
3 &
4 ^
5 |
6 &=,^=,|=,<<=,>>=,~=

 

 

 

 

 

 

 

 

三.简单应用

功能 示例 c++表示
去最后一位 (110011)->(11001) x>>1
在最后加0 (11011)->(110110) x<<1
在最后加1 (11011)->(110111) (x<<1)+1
把最后一位变1 (11010)->(11011) x|1
把最后一位变0 (11011)->(11010) (x|1)-1;
最后一位取反 (11011)->(11010) x^1
把右数第k位变成1 (11011)->(11111)(k=3) x|(1<<(k-1))
把右数第k位变成0 (11011)->(10011)(k=4) x&~(1<<(k-1))
右数第k位取反 (11011)->(10011)(k=4) x^(1<<(k-1))
取末三位 (11011)->(011) x&7
取末k位 (11011)->(11)(k=2) x&((1<<(k+1))-1)
取右数第k位 (11011)->(1)(k=2) (x>>(k-1))&1
把末k位变成1 (11000)->(11011)(k=2) x|(1<<(k-1))
末k位取反 (11000)->(11011)(k=2) x^(1<<(k-1))
把右边连续的1变成0 (01011)->(01000)(k=2) x&(x+1)
把右起第一个0变成1 (11101)->(11111) x|(x+1)
把右边连续的0变成1 (11001)->(11111) x|(x-1)
取右边连续的1 (10111)->(111) (x^(x+1))>>1
去掉右起第一个1的左边 (11010)->(10) x&(x^(x-1)) 或 x&(-x)
从右边开始,把最后一个1改写成0 (11010)->(11000) x&(x-1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

部分来自百度百科。

标签:运算,二进制,状压,11010,11011,取反,变成,DP
来源: https://www.cnblogs.com/liyikang/p/15895440.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有