zoukankan      html  css  js  c++  java
  • 关于求负数补码

    原创


    负数在计算机中是用补码的形式存储的,正数在计算机中是用原码的形式存储的。

    正数求原码直接将十进制转二进制即可,负数的补码是在原码的基础上除符号位外其余位取反后+1。

    但是用这种方式求负数补码用编程实现不太方便,下面介绍一种用编程实现起来较简便的求负数补码的方法:

    1. 求出负数绝对值的原码

    2. 从原码的最后一位数码位往前数,当遇到第一个1时停在此位置

    3. 将第一个1前面的数码全部求反

    比如:(字长为8位)

    求-127的补码:

    127的原码:  01111111

    -127的补码:   10000001

    求-80的补码:

    80的原码:  01010000

    -80的补码:   10110000

    求-1的补码:

    1的原码:  00000001

    -1的补码:   11111111

    这种方式用编程实现起来比较方便,在原码的基础上除符号位外其余位取反后+1的方式要考虑进位。

     1 #include<stdio.h>
     2 #include<memory.h>
     3 #include<string.h>
     4 #include<stdlib.h>
     5 
     6 int arr[8];    //范围为 -128 ~ +127
     7 
     8 void Complement(int number)    //求负数补码
     9 {
    10     number=abs(number);    //取绝对值
    11     int i=7;
    12     while(number!=0) //求出其绝对值原码
    13     {
    14         arr[i]=number%2;
    15         i--;
    16         number/=2;
    17     }
    18     for(i=7;i>=0;i--)
    19     {
    20         if(arr[i]==1)
    21         {
    22             int j;
    23             for(j=0;j<i;j++)    //取反 
    24                 if(arr[j]==1)
    25                     arr[j]=0;
    26                     else
    27                     arr[j]=1;
    28             break;
    29         }
    30     }
    31     for(i=0;i<=7;i++)
    32         printf("%d",arr[i]);    
    33     printf("
    ");
    34     memset(arr,0,sizeof(arr));    //重置数组
    35 }
    36 
    37 int main()
    38 {
    39     int i;
    40     for(i=-128;i<=-1;i++)    // 求 -128 ~ -1 的补码 
    41         Complement(i);    
    42     return 0;
    43 }

    负数补码还原成原码是这样的:

    1. 从补码的最后一位数码位往前数,遇到第一个1时停止

    2. 将第一个1前的全部数码取反

    3. 将第一个数码置1(原来肯定是0,因为我们这里只讨论负数的补码)

    为巩固知识点写下此篇博客,理解不是很深刻,如有错误,欢迎大家指正。

    17:40:52

    2018-04-24

  • 相关阅读:
    买二手房的税费详细版本
    实时推荐部分代码
    卡片推荐部分代码
    详解一下网络广告cpc、cpm、cpl、cpa、cps、cpr的计费方法是什么
    吴军硅谷来信《三板斧破四困境》
    JS实现的在线推荐逻辑
    mongo数据库时间存储的问题
    crontab 定时的陷阱
    【剑指offer】栈的压入、弹出序列
    【剑指offer】包含min函数的栈
  • 原文地址:https://www.cnblogs.com/chiweiming/p/8932140.html
Copyright © 2011-2022 走看看