gpt4 book ai didi

binary - 将十进制转换为有符号二进制

转载 作者:行者123 更新时间:2023-12-04 17:58:02 27 4
gpt4 key购买 nike

假设我想将“-128”转换为二进制。

据我所知,我得到“128”的二进制表示,反转位然后加1。

所以 128 = 10000000

所以“逆”是 01111111

那么“01111111”+“1”=“10000000”这是“-0”不是吗?

我的教科书让这看起来很容易,但我无法弄清楚我做错了什么。谢谢您的帮助。

最佳答案

不,那绝对是 -128 (无论如何,在二进制补码中,鉴于您对否定数字的描述,这就是您所谈论的内容)。只有-0用于负数的符号/大小表示。

this answer有关两种表示以及 C 允许的第三种表示的详细信息,一个的补充,但我将从那里复制一个片段,以尽可能保持此答案的自包含。

要获得正数的负表示,您可以:

  • 反转所有位,然后为二进制补码加一。
  • 反转所有位以获取补码。
  • 仅反转符号/幅度的符号位。

  • 您可以在下表中看到这一点:
    number | twos complement     | ones complement     | sign/magnitude
    =======|=====================|=====================|====================
    5 | 0000 0000 0000 0101 | 0000 0000 0000 0101 | 0000 0000 0000 0101
    -5 | 1111 1111 1111 1011 | 1111 1111 1111 1010 | 1000 0000 0000 0101

    请注意,8 位二进制补码中没有 128,最大值为 127。

    数字通过中点的地方就是“聪明”的事情发生的地方:
    00000000 ->    0
    00000001 -> 1
    : :
    01111110 -> 126
    01111111 -> 127
    10000000 -> -128
    10000001 -> -127
    : :
    11111110 -> -2
    11111111 -> -1

    因为添加(例如) 100 的位模式和 -1使用 8 位环绕将自动神奇地为您提供 99 :
    100+  0 0110 0100
    1- 0 1111 1111
    ===========
    1 0110 0011 99+ (without that leading 1)

    关于binary - 将十进制转换为有符号二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4720309/

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