gpt4 book ai didi

c - int 转位串函数来处理负数

转载 作者:行者123 更新时间:2023-11-30 16:50:51 25 4
gpt4 key购买 nike

如何更改此函数来处理负数?它正确输出所有内容,但负数时不会使前导位为 1。我无法进行否定检查,然后简单地强制第一位为 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;
}

最佳答案

我猜你想要的是:

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

产生10。因为它是关于标志的,所以可能会简单地写成:

'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
11111111111111111111111111111111

关于c - int 转位串函数来处理负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42014898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com