将带符号的int二进制转换为long



我有一个函数,它将整数转换为二进制表示,并存储在一个长变量中。我的问题是,我的函数只转换正整数,所以我需要实现一个新的函数,这个函数会稍微更改一下。我还需要把垃圾箱存起来。rep.,因为这取决于其他特性。有办法吗?

我的函数成功地只转换正整数:

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;
}

有办法吗?

考虑代码重用,因为您有一个用于正值的工作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程序员dude所评论的那样,OP的方法限制了有用的int范围,因为溢出发生在大值中。


有关所有int到包括2在内的各种碱基的文本转换,请参阅char* itostr(char *dest, size_t size, int a, int base)

我不能发表评论,但sprintf函数确实适用于您:

#include <stdio.h>
int main ( void )
{
char temp[128] ;
int num = -1  ;
sprintf  ( temp , "%x" , num );
puts ( temp ) ;
return 0 ;
}