关于按位与和按位或以及左/右移的相关知识
来源:互联网 发布:c语言中的temp 编辑:程序博客网 时间:2024/05/16 07:36
1、按位与(&)与普通的与(&&)的一些不同之处:
(1)按位与(&)是每个相应的比特位都进行与操作,在比较时依然遵循0&&1=0&&01&&0=0,1&&1=1原则。而与(&&)操作是整体进行比较时遵循0&非零=0,非零&非零=1原则。
(2)举例:char a=10;char b=3;求a&&b,与a&b;
解:二进制的表示形式为:a:00001010
b:00000011
与操作的结果为:1(因为10和3都可以表示为真,所以与操作后的结果也是真即1)
按位与操作结果为:00000010==2;
注:按位或与或操作也是相应的道理,读者可以自行判断。
2、移位操作:
左移操作是把每个比特位向左移动一个单位而最高位则自动补充一个0,右移操作是每个比特位向右移动一位从而在最低位补充一个0;所以左移相当于除2,右移相当于乘2。
3、按位操作经常会与左移(<<)和右移(>>)操作结合到一起进行操作。
例如:实现一个对8bit数据的指定位的置0或置1操作,并保持其他位不变。
解:相应的程序代码如下:
正确代码是标有(1)的两句代码,有的人会觉得(2)代码理解起来也对啊,为什么是错误的呢?那你就犯了一个常识性的错误,如果你把*p_data进行移位处理的话,那么你的原值会进行改变,那如果执行完(2)语句后再加上(3)语句把p_data移回来不行么,这里要清楚一点,就是你移位操作补上去的都是0,而不再是原来的数字了,比如1011先右移两位变成0010再左移两位变成1000而不再是原来的1011了,所以只能对1进行移位操作,因为1除了最后一位其余的都是0所以可以随意的移位。
若上述讲述的有什么不对的地方,或者有什么可以改进的地方 欢迎在下方的评论区写下您的意见,我会及时回复并更正,谢谢。
- 关于按位与和按位或以及左/右移的相关知识
- 浅谈按位与,按位或,左移与右移运算符
- C语言基础 按位运算符 按位与,或,非,左移,右移
- 位运算小结(按位与、按位或、按位异或、取反、左移、右移)
- 位运算小结(按位与、按位或、按位异或、取反、左移、右移)
- 5、位运算符、按位与、按位或、按位非、左移、右移、原码、反码、补码
- 关于C语言中的按位与(&)按位或(|)按位异或(^)取反(~)左移(<<)右移(>>)
- [ACM][ASM][0x0001]按位与、按位或、按位异或、按位非、左移、右移
- 按位与(&)按位或(|)按位异或(^)按位取反(~)左移(<<)右移(>>)
- 按位与(&)按位或(|)按位异或(^)按位取反(~)左移(<<)右移(>>)
- awk:左移、右移、按位取反、按位与、按位或、按位异或、数值IP转字符串IP
- 按位与(&)按位或(|)按位异或(^)按位取反(~)左移(<<)右移(>>)
- 位运算--与,或,异或,左移,右移
- 按位与、按位或、按位异或、左移、右移运算符的简单介绍(部分二进制运算符的简单介绍)
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- AVL树
- 判断平衡二叉树/二叉树镜像/一个m*n的矩阵,从左到右从上到下都是递增的,给一个数x,判断x是否在矩阵中
- HTML和CSS的注释方式及其作用
- Manacher算法总结
- (数据结构)二叉树的基本操作
- 关于按位与和按位或以及左/右移的相关知识
- Java设计模式之适配器模式
- Vue过滤器和自定义过滤器
- Java四种线程池的使用
- html和css和的注释方式及作用
- 关于telnet登录
- BZOJ1001狼抓兔子
- AlertDialog图片文本列表
- 前台系统首页面的广告问题