十进制到二进制,带两个补码

时间:2019-02-25 13:06:20

标签: c++ binary

我试图像这样将十进制转换为二进制: 我有输入整数和二进制整数。

int rem;
int bin[32] = {0};

for(int i=0; input != 0; i++) { //making array of binary, but reversed
    rem = input%2;
    bin[i] = abs(rem);
    input = input / 2;
}

for(int i = 0; i < 32; i++) { //reversed binary is put in correct order
    binary[i] = bin[31 - i];
}

现在我希望,如果输入为负数(例如“ -5”),它将得到两个补数。

当尝试用“〜”补全时,它们会以某种方式变为“ -1”。

for (int i = 0; i < 32; i++) {
    binary[i] = ~binary[i];
}

1 个答案:

答案 0 :(得分:2)

你快到了。

您每个<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd"> <Configure class="org.eclipse.jetty.server.handler.ContextHandler"> <Set name="contextPath">/ccmail</Set> <Set name="handler"> <New class="org.eclipse.jetty.server.handler.ResourceHandler"> <Set name="resourceBase">/fully/qualified/path/to/my/jetty.base/webapps/ccmail</Set> <Set name="directoriesListed">true</Set> </New> </Set> <Set name="virtualHosts"> <Array type="java.lang.String"> <Item>apps.cairunet.ad.br</Item> </Array> </Set> </Configure> 存储一位,因此只需要用int(XOR 1)翻转该位。这样,0变为1,而1变为0。波浪号运算符^ 1将翻转所有位,因此0变为-1,而1变为-2(即不是您想要的)。

然后,要取反补码,您需要

  1. 将其反转
  2. 添加~why

例如:

1

或将两个步骤合并为一个:

for (int i = 0; i < 32; i++) {
    binary[i] ^= 1;
}

for (int i = 31; i >= 0; i--) {
    binary[i] ^= 1;
    if (binary[i])
        break;
}