C++輸入十進位制數,輸出對應二進位制數、十六進位制數

Curtis_發表於2019-03-04

一、輸出十進位制、十六進位制、八進位制數:

dec:  指示cout以十進位制輸出。       December

hex:  指示cout以十六進位制輸出。    Hexadecimal

oct:   指示cout以八進位制輸出。        October

#include<iostream>
using namespace std;
 
int main(){
    int n_max = 42;
    cout<<n_max<<endl;           //十進位制輸出
    cout<<hex<<n_max<<endl;      //十六進位制輸出
    cout<<oct<<n_max<<endl;       //八進位制輸出
    return 0;
}

二、輸出二進位制數:

①、#include<bitset>

②、const int num = 32;//num表示bitset宣告的位數,即有多少位輸出。

③、cout<<(bitset<num>)input<<endl;   //格式:(bitset<num>)input

#include<iostream>
#include<bitset>
using namespace std;

const int num = 32;//num表示bitset宣告的位數,即有多少位輸出。

int main(){
    int input = 42;
    cout<<(bitset<num>)input<<endl;   //格式:(bitset<num>)input
    return 0;
}

三、逐個輸入十進位制數,逐個輸出對應二進位制數及十六進位制數:

#include<iostream>
#include<bitset>
using namespace std;
const int num=32;

int main(){

        std::ios_base::sync_with_stdio(false);  //這行程式碼,加速cin、cout

	int input;

	while(cin>>input){
		cout<<(bitset<num>)input<<endl;  //二進位制
		cout<<hex<<input<<endl;   //十六進位制
	}

	return 0;
}

四、ctrl+z作為cin結束的問題:

①、Ctrl+z並不會產生一個普通的ASCII碼值,也就是說它不會產生一個字元,不會被放到輸入緩衝區中,所以讀不到它,你輸入了就好像木有輸入一樣,它只能作為結束迴圈來用。


②、還有在Windows系統中,只有按下回車才會去檢測之前有沒有按下Ctrl+z,才會去檢測流是否結束。就是在按下回車之前,輸入緩衝區並不能檢測到是否有Ctrl+z按下,所以即使按了Ctrl+z,照樣還可以從鍵盤去輸入內容,但是Ctrl+z這行輸入的內容到時候並不會被讀取到,因為在緩衝區檢測時,如果檢測到Ctrl+z(結束標誌),就會認為輸入流結束了,那麼後邊的內容就不會被讀進去,而被丟掉。

五、驗證結果:

 

二進位制中,從右起某一位的權值 = 2^(其前面的數位數量)。 

 

六、while(cin>>x)與 scanf("%d",&x)!=EOF:

注: cin速度慢,測試資料太多可能會超時的。


注:有的時候,用scanf("%lld")來讀寫long long可能會出錯。

       要用cin讀,可以在int main()中開頭加std::ios_base::sync_with_stdio(false) 來加速cin。

相關文章