C++ 移位運算與進制轉換 淺析
阿新 • • 發佈:2017-07-02
十進制 ng- ostream font col urn line 繼續 adding
移位運算包括“邏輯移位”(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; }
C++ 移位運算與進制轉換 淺析