gpt4 book ai didi

c++ - 计算整数中的位数(负整数?)

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:04 24 4
gpt4 key购买 nike

我真的是编码新手(大约 1.5 周前开始),所以希望我在这里问这个不是太令人发指的罪行(如果是,我请求原谅)。

我正在尝试编写一个计算整数位数的函数,我编写的代码似乎非常适合计算正整数,但负整数似乎表现得非常有趣。

根据我的了解,我的印象是负符号整数只是在它前面设置了一点,如下例所示:

 2:  0000 0010
-2: 1000 0010

理想情况下,我的函数应该像这样:bit_count([negative number here])1 + bit_counter([absolute value of negative number]) 相同

但事实并非如此。

这是我的功能:

    int bit_count(int byte)
{
int bit;
int tally;
tally = 0;
for (bit = 0x80; bit > 0; bit = bit >> 1)
{
if ((byte & bit) != 0)
++tally;
}
return (tally);
}

一些示例数据:

bit_count(-1) 结果为 8bit_count(-6) 结果为 6bit_count(-4) 结果为 6

等等……

我有一个相当信任的 friend 建议,根据机器的不同,我的位计数功能包括的有符号位前面实际上有更多元数据,但我不知道我' d 需要纠正这一点。

谢谢

最佳答案

正如其他人在评论中指出的那样,虽然在确定有符号整数的符号时检查最高有效位是有效的,但字节的其余部分也会发生变化。

换句话说,您的代码可以正常工作,但是您关于负整数表示的前提是错误的。

有符号整数中使用的机制称为二进制补码,本质上意味着取 2^n,其中 n 是位数,减去整数的绝对值以获得负值。

-2 因此

1111 1110   

而不是

1000 0010

如您所料。这样做的原因是它确保标准算术运算适用于有符号整数。

关于c++ - 计算整数中的位数(负整数?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21012410/

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