【問題描述】
用位操作把一個128位的二進制數擴大到2倍,并以16進制的形式輸出。要求從鍵盤輸入4個int型的十進制數,依次表示128位的低int數到高int數的排列。要求輸出128位的十六進制格式,并輸出擴大到2倍后的十六進制數。各個部分用一個空格分隔,每個部分是4個int型的機內數擴大2倍后的十六進制形式。
【樣例輸入】
1 2 3 4
【樣例輸出】
128-bit hexadecimal number:
00000001 00000002 00000003 00000004
After doubling:
00000002 00000004 00000006 00000008
【樣例說明】
輸出的第二行是124bits的原數以十六進制形式顯示。
輸出的第四行是124bits的原數擴充2倍后的十六進制形式顯示。
代碼答案是這樣的:
#include<iostream>
#include<iomanip>
using namespace std;
int main (){
int a,b,c,d;
cin>>a>>b>>c>>d;
cout<<"128-bit hexadecimal number:\n";
cout<<setiosflags(ios_base::fixed);
cout<<setw(8)<<setfill('0') <<hex<<a<<" ";
cout<<setw(8)<<setfill('0') <<hex<<b<<" ";
cout<<setw(8)<<setfill('0') <<hex<<c<<" ";
cout<<setw(8)<<setfill('0') <<hex<<d<<" ";
a=a<<1;
b=b<<1;
c=c<<1;
d=d<<1;
if(a<0)
b++;
if(b<0)
c++;
if(c<0)
d++;
cout<<"\n"<<"After doubling:\n";
cout<<setiosflags(ios_base::fixed);
cout<<setw(8)<<setfill('0') <<hex<<a<<" ";
cout<<setw(8)<<setfill('0') <<hex<<b<<" ";
cout<<setw(8)<<setfill('0') <<hex<<c<<" ";
cout<<setw(8)<<setfill('0') <<hex<<d<<" ";
return 0;
}
想請問大家這一部分是為什么:
a=a<<1;
b=b<<1;
c=c<<1;
d=d<<1;
if(a<0)
b++;
if(b<0)
c++;
if(c<0)
d++;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/268082.html
標籤:C++ 語言
