原码、反码、补码

计算机中的符号数有原码、反码和补码三种表示方法,都含符号位和数值位。系统中数值用补码表示和存储,可统一处理符号位、数值域及加减法。还介绍了补码转原码的方法,如已知补码求原码,正数原码是补码,负数则对补码再求补码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机中的符号数有三种表示方法,即原码、反码和补码

三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。

正数
 10的原码是 0000 0000 0000 0000  0000 0000 0000 1010
 10的反码是 0000 0000 0000 0000  0000 0000 0000 1010
 10的补码是 0000 0000 0000 0000  0000 0000 0000 1010    计算机中存储的
负数
-10的原码是 0000 0000 0000 0000  0000 0000 0000 1010
-10的反码是 1111 1111 1111 1111  1111 1111 1111 0101
-10的补码是 1111 1111 1111 1111  1111 1111 1111 0110    计算机中存储的
总结
1.正数的原码与其反码补码相同
2.负数的原码最高位为1
3.负数的反码符号位不变,其余各位按位取反
4.负数的补码在其反码的基础上+1
5.计算机系统中,数值一律用补码来表示和存储

补码转化为原码
已知一个数的补码,求原码的操作其实就是对该补码再求补码:
⑴如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
⑵如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
已知一个补码为1111 0111,则原码是1000 1001(-9)。
因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位111 0111取反后为000 1000;
再加1,所以是1000 1001。

java中输出二进制

package com.cwp.thread;

import static java.lang.System.out;

public class Demo {

    final static char[] digits = { '0', '1' };

    // 改造的
    public static String intToBinaryString(int i) {
        char[] buf = new char[32];
        int pos = 32;
        int mask = 1;
        do {
            buf[--pos] = digits[i & mask];
            i >>>= 1;
        } while (pos > 0);

        return new String(buf, pos, 32);
    }

    public static void main(String[] args) {
        out.println(Integer.toBinaryString(2147483647));
        out.println(Long.toBinaryString(2147483648L));
        out.println(intToBinaryString(10));
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值