zoukankan      html  css  js  c++  java
  • 补码和源码的相互转化

    一 源码求补码

    求给定数值的补码分以下两种情况:

    正数

    正整数的补码是其二进制表示,与原码相同。

    例:+9的补码是00001001。(备注:这个+9的补码是用8位2进制来表示的,补码表示方式很多,还有16位二进制补码表示形式,以及32位二进制补码表示形式,64位进制补码表示形式等。每一种补码表示形式都只能表示有限的数字)。

    负数

    求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。

    同一个数字在不同的补码表示形式中是不同的。比如-15的补码,在8位二进制中是11110001,然而在16位二进制补码表示中,就是1111111111110001。以下都使用8位2进制来表示。

    例:求-5的补码。

    -5对应正数5(00000101)→所有位取反(11111010)→加00000001(11111011)

    所以-5的补码是11111011。

    0的补码

    数0的补码表示是唯一的。

    [+0]补=[+0]反=[+0]原=00000000

    [-0]补=11111111+1=00000000

    补码求原码

    已知一个数的补码,求原码的操作其实就是对该补码再求补码:

    ⑴如果补码的符号位为“0”,表示是一个正数,其原码就是补码。

    ⑵如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。

    例:已知一个补码为11111001,则原码是10000111(-7)。

    因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。

    其余七位1111001取反后为0000110;再加1,所以是10000111。

  • 相关阅读:
    codeblocks 缺少dll libstdc++-6.dll and so on
    gtx 1650 inspiron 1501 pytouch env
    python串口通信
    devops tools
    mosquitto 消息持久化到file
    Mybatis mapper动态代理的原理详解(转)
    Java @Repeatable(转)
    Linux进阶教程丨第10章:管理网络
    CTF-Pwn丨栈溢出入门题目思路解析
    白帽专访丨月神:我的The loner安全团队
  • 原文地址:https://www.cnblogs.com/qianr/p/13794937.html
Copyright © 2011-2022 走看看