位运算基础:入门

神马是位运算?

 

   程序中的所有数在计算机中都是以二进制形式储存的,位运算就是对整数在内存中的二进制位进行直接的操作。 比如and是一个逻辑运算符,但整数和整数之间可以进行and运算,比如 6的二进制是 110, 11的二进制是1011,那么。6 and 11的结果就是2.

 

它在二进制中是这样表示的:

 

             110

and     1011

=========

           0010   -》 2

 

由于位运算直接对内存数据进行操作,不需转成十进制,所以处理速度非常快,这个快的用处有没有实际意义呢?我暂时还不知道,继续读下去。

 

C/C++中的位运算符号

 

//C/C++包含的位运算符号 c = a & b; //这句话相当于 与 运算 c = a | b; //这句话就是 或 运算 c = ~a; //这句话就是 非 运算 c = a ^ b; //这个是··· a xor b c = a << b; //a 向右移动 b位 c = a >> b; //a 向左移动 b位 

 

 

  需要注意的是,逻辑运算与位运算是有很大区别的

 

 

 

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++就可以这样表示了

 

 

int a = 1; int b = 2; a = a ^ b; b = a ^ b; a = a ^ b; //输出结果是 2 1 

 

然后是 ~ not运算,就是所有0或1进行取反  

下面是一个例子

a: 00010

~a:11101

 

用程序表示 


unsigned short a = 100; a = ~a; cout << a << endl; 

 

 

用不同的类型的数据所出来的结果都是不一样的,因为每种数据类型的长度都是不一样的

 


你可能感兴趣的:(C++,学习)