巧みにシフト演算


適切なシフト演算は、コードを簡潔に、優雅に見せることができます.次に、プログラミングで使用される周波数の高いシフト演算を見てみましょう.
本プログラムはVS 2010コンパイラの下で実行され、VS 2010ではintが4バイト(32ビット)を占め、以下のプログラムもint型変数(定数)のみを考慮する.
 
// shiftOperation.cpp :              。
/*******************************************
  author:   Jerry
  functoin:   
********************************************/

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    //  int    
    cout<<((1<<31)-1)<<endl;    //int 4   ,     2^32  ,        ,      2^31-1(       )
    //  int    
    cout<<(1<<31)<<endl;    //int          
    cout<<"==============================
"; // int p=12344; if((p&1)==1) // , 1, 0, 1( 1, 0) { cout<<p<<" !"<<endl; } else { cout<<p<<" !"<<endl; } cout<<"==============================
"; // //1. int a=2,b=3; a=a*b; b=a/b; a=a/b; cout<<a<<","<<b<<endl; int c=4,d=5; c=c+d; d=c-d; c=c-d; cout<<c<<","<<d<<endl; //2. int e=6,f=7; //e=e^f; // e f , e , 1 ( e^f=g(g e )) //f=f^e; // f , (e^f=g --> f^g=e) //e=e^f; // f e, f e( ) f // e^=f^=e^=f; cout<<e<<","<<f<<endl; cout<<"==============================
"; // // : ( int ) 31 0, 31 -1 int h=-6; cout<<((h^(h>>31))-(h>>31))<<endl; // h ,h^0-0=h, // h ,h^(-1)+1, h -1 , 1, cout<<"==============================
"; // 、 int i=2,j=3; // cout<<((j&((i-j)>>31)) | (i&(~(i-j)>>31)))<<endl; // i-j>=0, 31 0,j&0=0;~(i-j) 31 -1,i&-1=i (-1 1111...1111) // cout<<((i&((i-j)>>31)) | (j&(~(i-j)>>31)))<<endl; // cout<<"==============================
"; // 2 int k=31; cout<<((k&(k-1))==0)<<endl; // 2 , 1( ),-1 0, 1 cout<<"==============================
"; // int m=6,n=8; // , 2 cout<<((m+n)>>1)<<endl; // cout<<((m^n)>>1)+(m&n)<<endl; //m^n 1 , 2,m&n 1 , cout<<"==============================
"; Sleep(5000); return 0; }