gpt4 book ai didi

bitwise-operators - 应用位移运算符

转载 作者:行者123 更新时间:2023-12-05 06:44:38 27 4
gpt4 key购买 nike

这个问题看似重复,但实际上并非如此。我想知道如何将负数 (base-10) 转换为 32 位数字 (base-2)。例如base-10 中的 -9 相当于 base-2 中的 11111111111111111111111111110111。请向我解释程序。提前致谢。

最佳答案

假设您在问题中有 32 位值,以使我的文本简单。尽管如此,这确实适用于所有位数。

在 2 的补码二进制表示中,两个 32 位值的相加等同于将它们相加,就好像这些位以通常的方式表示非负数一样。只是有些位模式表示负数,实际上是那些以 1 开头的位模式,这些数字通常是我们期望来自所有 32 位数字集合的最大一半的数字。

既然如此,所有 1 的位模式,通常是最大可能的 32 位数字,

    11111111111111111111111111111111

实际上代表-1。原因是,如果你要给它加 1,进位会一直走下去,用 0 替换每个 1,最后一个进位会从末尾掉下来,类似于一个有 999 的三位计数器,如果递增返回到 000。结果是

    00000000000000000000000000000000

通常代表零。这是如何-1 + 1 = 0在 2 的补码表示中工作。

现在如果你取一个 32 位数 n ,例如

    00010111000010101100100011110010

然后按位求补得到~n ,即用 0 替换每个 1,用 1 替换每个 0,

    11101000111101010011011100001101

然后添加这些得到n + ~n ,

    00010111000010101100100011110010
11101000111101010011011100001101 +
--------------------------------
11111111111111111111111111111111

没有携带发生,你得到一个全1的位模式,即-1 = n + ~n所以 -n = ~n + 1 .

这是关于 2 的补码表示的关键事实:-n = ~n + 1 .

现在您可以非常简单地解决您的问题。您知道如何转换正数,这使您能够取反。

什么是 -9 ?

首先像往常一样将 9 转换为二进制:1001 有很多前导零。然后对其求补,再加 1,得到 -9。这是事件的顺序。

 n : 00000000000000000000000000001001
//complement
~n : 11111111111111111111111111110110
//add 1
-n : 11111111111111111111111111110111

关于bitwise-operators - 应用位移运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28345932/

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