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。

  • 相关阅读:
    ecplise中修改reviewboard密码
    本地上jar命令
    Python面试必须要看的15个问题
    Maven命令行窗口指定settings.xml
    codevs1002搭桥(建图+Prim)
    codevs1099字串变换(Bfs)
    codevs1044四子连棋(Dfs)
    codevs1226倒水问题(Bfs)
    codevs1051单词接龙(栈)
    niop 2014寻找道路
  • 原文地址:https://www.cnblogs.com/qianr/p/13794937.html
Copyright © 2011-2022 走看看