当前位置: 移动技术网 > IT编程>开发语言>Java > 输出二进制补码

输出二进制补码

2020年07月20日  | 移动技术网IT编程  | 我要评论

描述
输入一个整型(int)的整数,输出它的32位二进制补码。

输入
一个整型整数。
输出
输出一行,即该整数的补码表示。
样例输入
7
样例输出
00000000000000000000000000000111

知点

第一位为符号位,0表示正数,1表示负数;
正数的原码,反码,补码相同;
负数的反码为各位取反,补码为反码加一;
2,原:0010 反:0010 补:0010
-2,原:1010 反:1101 补:1110

另外

0原码是00000000 -0原码是10000000
0反码是00000000 -0反码是11111111
0补码是00000000 补码没有正0与负0之分

解题

可以将0纳入不小于0的情况下处理
先将原数转化为二进制并复制到答案中
再根据正负求补码
如果为负数时先转换为反码,再求补码

代码

#include <iostream>
#include <cstring>

using namespace std;
int ans[33], temp[33];

int main() {
    memset(ans, 0, sizeof(ans));
    memset(temp, 0, sizeof(temp));
    int n;
    cin >> n;

    int flag = (n >= 0) ? 0 : 1;//正负
    n = (n >= 0) ? n : -n;
    int size = 0;
    do {
        temp[size++] = n % 2;
        n /= 2;
    } while (n != 0);//得到二进制
    for (int i = 0; i < size; ++i) {//复制到答案数组里
        ans[31 - i] = temp[i];
    }
    if (flag) {//负数情况下
        for (int i = 1; i < 32; ++i) {//反码
            ans[i] = (ans[i]) ? 0 : 1;
        }
        for (int i = 31; i > 0; --i) {//补码
            if (ans[i] == 1)ans[i] = 0;
            else {
                ans[i] = 1;
                break;
            }
        }
    }
    ans[0] = flag;//符号位

    for (int i = 0; i < 32; ++i) {
        cout << ans[i];
    }

    return 0;
}

本文地址:https://blog.csdn.net/xcdq_aaa/article/details/107427541

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网