1. 程式人生 > >C++ 移位運算與進位制轉換 淺析

C++ 移位運算與進位制轉換 淺析

移位運算包含“邏輯移位”(logical shift)和“算術移位”(arithmetic shift)。

邏輯移位:移出去的位丟棄,空缺位(vacant bit)用 0 填充。

算術移位:移出去的位丟棄,空缺位(vacant bit)用“符號位”來填充,所以一般用在右移運算中。

c++中,整數分有符號數和無符號數兩種,對於這兩種數做左移、右移運算,稍有區別:

1、如果是無符號數,不管是左移還是右移都是“邏輯移位” 。例,對無符號數 179 做左移、右移操作的結果,都是補0操作;

2、如果是有符號數,左移運算,那麼做的是“邏輯移位”,與無符號數的左移同。如果是做右移運算,那麼做的是“算術移位”。

最後本文給出十進位制數轉換為二進位制的遞迴工作機制圖例,如下

10進位制數轉換成二進位制數,這是一個連續除2的過程:

把要轉換的數,除以2,得到商和餘數,

將商繼續除以2,直到商為0。最後將所有餘數倒序排列,得到數就是轉換結果。

十進位制轉十六進位制原始碼

#include<iostream>
#include<string>
using namespace std;
string str_16="";

string switch_10_16(int ch)
{
    switch(ch)
    {
        case 0:return"0";break;
        case 1:return"1";break;
        case 2:return"2";break;
        case 3:return"3";break;
        case 4:return"4";break;
        case 5:return"5";break;
        case 6:return"6";break;
        case 7:return"7";break;
        case 8:return"8";break;
        case 9:return"9";break;
        case 10:return"A";break;
        case 11:return"B";break;
        case 12:return"C";break;
        case 13:return"D";break;
        case 14:return"E";break;
        case 15:return"F";break;
    }
}
long int change(long int num)
{
    if(num<16)
    {
        str_16+=switch_10_16(num); 
        return 0;
    }
    else 
    {
        change(num/16);
        str_16+=switch_10_16(num%16);
    }
}

int main()
{
    long str_10;
    cin>>str_10;
    change(str_10);
    cout<<str_16<<endl;
    return 0;   
}