神马是位运算?
程序中的所有数在计算机中都是以二进制形式储存的,位运算就是对整数在内存中的二进制位进行直接的操作。 比如and是一个逻辑运算符,但整数和整数之间可以进行and运算,比如 6的二进制是 110, 11的二进制是1011,那么。6 and 11的结果就是2.
它在二进制中是这样表示的:
110
and 1011
=========
0010 -》 2
由于位运算直接对内存数据进行操作,不需转成十进制,所以处理速度非常快,这个快的用处有没有实际意义呢?我暂时还不知道,继续读下去。
C/C++中的位运算符号
需要注意的是,逻辑运算与位运算是有很大区别的
and 和 or运算学过离散数学或者计算机组成原理的童鞋应该很容易理解,下面讲xor:
xor运算,也就是 ^ 运算,通常对于二进制的特定一位进行取反操作,因为异或可以这样定义:0和1都不变,异或1则取反、
这个运算的你运算是它本身,也就是说两次异或同一个数之后结果不变
也就是 (a ^ b) ^ b = a
然后学习到这里
就可以看到一个很有趣的交换功能不需要用多一个变量
a = a xor b;
b = a xor b;
a = a xor b;
用c/c++就可以这样表示了
然后是 ~ not运算,就是所有0或1进行取反
下面是一个例子
a: 00010
~a:11101
用程序表示
用不同的类型的数据所出来的结果都是不一样的,因为每种数据类型的长度都是不一样的