把十進制數(long型)分別爲二進制和十六進制形式輸出,不能使用printf






//首先針對unsigned long進行處理
//可以使用兩種數據結構保存,一種使用棧,只需要每次向左移一位,然後進行位並操作
//另一種使用數組,需要左右移位


//十進制轉換爲二級制使用棧處理,
stack<char>* int_to_bin(unsigned long data)
{
unsigned int  longSize=sizeof(unsigned long) ;//計算unsigned long數據類型的位數


stack<char> Stack;
for(unsigned int i=0;i<longSize;i++)
{
char temp=static_cast<char>((data>>i)||1);//右移i位,並和1進行位並操作,計算data二進制第i位的值
   Stack.push(temp);
}
Stack.push('\0');


return &Stack;
}



轉換爲十六進制使用數組轉換
char* unsigned_to_hex(unsigned long data)
{
unsigned int longSize=sizeof(unsigned long)*8;


    char result[128];
result[0]='0';
result[1]='x';
result[longSize/4+2]='\0';


for(unsigned int i=0;i<longSize/4;i++)
{
int temp=data<<(4*i)>>(longSize-4);//向左移動4*i,然後向右移動longSize-4位,得到十六進制i位的四位二進制的數值.
        cout<<temp<<endl;
result[i+2]=temp<10?temp+'0':temp-10+'A';
cout<<result[i+2]<<endl;
}


  return result;

}



如果是負數,轉成二進制時爲該數二進制的補碼,也就是該數二進制原碼的反碼加1,然後進行和上面一樣的處理

char* int_to_hex(unsigned long data)

{

    data=data=>0?data:~data-1;

   return   unsigned_to_hex(data);

}



發佈了26 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章