我有一个函数,可将整数转换为二进制表示形式并将其存储在long变量中。我的问题是我的函数只能转换正整数,因此我需要实现一个新函数,将其略微更改即可。我仍然需要存储垃圾箱。代表在一个长变量中,因为这取决于其他功能。有办法吗?
我的函数只能成功转换正整数:
long convertToBin(int decn)
{
long binn = 0;
long rem;
long a = 1;
while(decn != 0)
{
rem = decn % 2;
binn = binn + rem * a;
a = a * 10;
decn = decn / 2;
}
return binn;
}
我已经这样尝试过,但是出了点问题-不起作用...
long negConvertToBin(int decn)
{
long binn = 0;
decn = abs(decn);
decn = decn - 1;
decn = ~decn;
long rem;
long a = 1;
while(decn != 0)
{
rem = decn % 2;
binn = binn + rem * a;
a = a * 10;
decn = decn / 2;
}
return binn;
}
答案 0 :(得分:1)
有办法吗?
请考虑重复使用代码,因为您可以使用convertToBin()
来获取正值。
long NegAndPosConvertToBin(int decn) {
if (decn < 0) return -convertToBin(-decn);
return convertToBin(decn);
}
如果OP仍需要独立的long negConvertToBin(int decn)
,则
long negConvertToBin(int decn) {
decn = -decn;
// same body as convertToBin() without the return
return -binn;
}
正如@Some programmer dude所评论的那样,OP的方法限制了int
的有用范围,因为发生大数值溢出。
要将所有int
转换为包括2在内的各种基数,请参见char* itostr(char *dest, size_t size, int a, int base)
答案 1 :(得分:1)
我无法发表评论,但 sprintf 功能确实可以为您服务:
#include <stdio.h>
int main ( void )
{
char temp[128] ;
int num = -1 ;
sprintf ( temp , "%x" , num );
puts ( temp ) ;
return 0 ;
}