如何更改此函数以处理负数?它正确地输出所有内容,但不会将前导位设为负数。我不能做否定检查,然后简单地强制第一位为1,因为前导位和其余数字之间的0的数量将会关闭。
char* fromInt(int bin){
static char str[33];
str[1] = '\0';
int n;
for (n = 128; n > 0; n >>= 1){
if( (bin & n) == n){
strcat(str, "1");
}else{
strcat(str, "0");
}
}
return str;
}发布于 2017-02-03 09:18:58
我猜你想要的是:
char* fromInt(int bin)
{
static char str[33];
str[0] = '0' + ((bin & 0x80000000) == 0x80000000);
str[1] = '\0';
for (int n = 0x40000000; n > 0; n >>= 1) {
if ((bin & n) == n)
strcat(str, "1");
else
strcat(str, "0");
}
return str;
}该函数有两个步骤。首先是确定符号位的设置(假设int对象有32位,并且它使用二进制补码算法):
(bin & 0x80000000) == 0x80000000生成1或0。因为它是关于标志的,所以它可能简单地写成:
'0' + (bin < 0)第二步是像在原始代码中一样,从位置30到0循环剩余的位。
下面是一个示例程序:
int main(void)
{
printf("%s\n", fromInt(0));
printf("%s\n", fromInt(1536));
printf("%s\n", fromInt(-1));
return 0;
}这将输出:
00000000000000000000000000000000
00000000000000000000011000000000
11111111111111111111111111111111https://stackoverflow.com/questions/42014898
复制相似问题