C 将有符号整数转换为二进制到长
C conversion of signed int as binary to long
我有一个函数可以将整数转换为二进制表示形式并将其存储在一个 long 变量中。我的问题是我的函数只转换正整数,所以我需要实现一个新函数,该函数将稍微改变一下来做到这一点。我仍然需要存放垃圾箱。代表在一个 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;
}
Is there a way?
考虑重用代码,因为您有一个有效的 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;
}
正如 所评论的那样,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 ;
}
我有一个函数可以将整数转换为二进制表示形式并将其存储在一个 long 变量中。我的问题是我的函数只转换正整数,所以我需要实现一个新函数,该函数将稍微改变一下来做到这一点。我仍然需要存放垃圾箱。代表在一个 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;
}
Is there a way?
考虑重用代码,因为您有一个有效的 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;
}
正如 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 ;
}