把十进制数(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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章