问题描述
- 求问按位&按位|按位^按位~的意义是什么
- 我知道按位操作的规则计算方式,就是不清楚位运算出来的值的作用意义,请大神告知
解决方案
比如说一个函数,需要一些参数,这些参数既可以定义为很多个bool变量,也可以使用一个整数,每个二进制位表示一个bool变量,后者更简单。
windows api中经常有这样的设计,比如不同的窗口风格。
那么这种一个整数表示的二进制变量,怎么取得和设置某一位呢?就要用到位运算。
再比如,一些加密算法,也需要用到位运算。
解决方案二:
最常用的是标致位,用来取/设置某个位标志。
解决方案三:
基本上取且,或,或者反转之类的操作会用
解决方案四:
有些算法和操作只需要一次操作一位或几位,比如把大写字母变小写字母只需要第5位置1,哈夫曼树要一位一位的找到树叶,有些函数的参数是第一位代表什么意思第二位代表什么意思等等。
解决方案五:
一个字节,8个二进制位,可以代表8种状态或状态值,按位计算。这样可以节约内存、简化代码设计。
如果不用这种方式,是否需要用数组什么的代替吧?
解决方案六:
举个例子说明吧,我用二进制演示给你看,1100&&0011 相对于1100&0011换算成十进制分别是12&&3和12&3,但是第一个是true第二个是false 因为**第一个整体的做‘与’运算**,而第二个是**每一'位都做与'运算**因此是结果完全不一样的,~和^也是同样的道理,一个是整体取反,另外一个是与某个特定的值(二进制)取异或//希望你能理解
解决方案七:
有时候能使二进制数据操作起来更方便。例如:因为所有二进制数据对1按位取&都等于它本身,对0按位取|也等于它本身。那么将ascii的A转化为a,因为A的ascii码二进制表示为0100 0001, a为0110 0001,那么我们可以将A对0010 0000按位取或,就能得到a了。同理在java处理bmp图像要获得rgb管道值也可以采用按位取与
解决方案八:
这的是实际中看情况而定,
比如用|运算可以进行两个数的交换位置
比如使用&可以用来统计一个整数二进制中1的个数
多总结就好了