// 第二十五章补充内容 16 位运算 //位运算直接对二进制位进行的运算,C++提供了可以对位进行操作的位运算符 // & 按位与(AND) // | 按位或(OR) // ^ 按位异或(XOR) // ~ 按位非(NOT)(取反) // >> 右移动运符 // >> 左移动运算符 //16.1 按位与"&"运算符 //补码的设计目的如下 //1 统一正零和负零 //2 使减法运算转换为加法运算 //3 使负数在计算时与正数一样正确 //订算机储存有符号整数时,是用该整数的补码进行储存,0的原码,返码,补码都是0,正数的原码,反码和补码可以简单的理解为相同,而负数的补码是它的反码加1 //"&"运算符有下列几个特殊的用途 //1 将所有二进制位清零 //2 取指定位 //16.2 按位或"|"运算符 //16.3 异或"^"运算符 //异或运算要求有两个运算值,然后返回一个值,只要两个运算值中的二进制同号,那么结果为0,异号,那么为真 //异或"^"运算符的用途如下所示 //(1)使特定或者全部位反转 //(2)不用临时变量就可以变换两个值 /*#include <iostream> using namespace std; int main() { int i=2,j=3; cout<<"开始的值为i:"<<i<<", j:"<<j<<endl; i = i ^ j; j = j ^ i; i = i ^ j; cout<<"交换后的值为i:"<<i<<", j:"<<j<<endl; return 0; }*/ //与0相^,值不变 //16.4 取返"~"运算符 //注意: ~运算符的优化级别比其他位运算符,算术运算符,关系运算符以及逻辑运算符都高 //16.5 左移运算符“<<” //16.6 右移运算符“>>” //16.7 复合位运算符 //<<= 复合按位左移赋值运算符 //>>= 复合按位右移赋值运算符 //&= 复合按位与赋值运算符 //^= 复合按位异合运算符 //|= 复合按位或赋值运算符 //16.8 不同长度数字的位运算 //16.9 位运算的实例 /*#include <iostream> using namespace std; int main() { int a, b, i; cout<<"请输入一个整数:"; cin>>a; b = 1<<15; //构造一个最高位为1,其余各位为0的整数 cout<<a<<"的二进制形式为:"<<endl; for(i=0; i<=16; i++) { cout<<(a&b?'1':'0'); //输出最高位的值(1或者0),也就是负数还是正数 a<<=1;//将次高位移动到最高位上 if(i%4==0) cout<<" "; //4位一组用空格分开 } cout<<endl<<"结束"<<endl; return 0; }*/