文档章节

关于求负数补码

o
 osc_z1hvg4cu
发布于 2018/04/24 17:41
字数 563
阅读 0
收藏 0

精选30+云产品,助力企业轻松上云!>>>

原创


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

正数求原码直接将十进制转二进制即可,负数的补码是在原码的基础上除符号位外其余位取反后+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("\n");
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

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

在C#中,公共,私有,受保护和没有访问修饰符之间有什么区别?

问题: All my college years I have been using public , and would like to know the difference between public , private , and protected ? 在我上大学的所有学年中,我一直都在使用pub......

法国红酒甜
16分钟前
5
0
unity的UGUI之中锚点(Anchors)和中心点(Pivot)、Shift和Alt键功能

在UGUI的控件属性之中,最上方的Rect Transform一栏可以看到锚点和中心点: 锚点Anchors 控件用于定位自身的基准点 可以点击左上角的方框,在其中选择锚点的不同方式: 注意图中,黄色的小点...

路过暴风
今天
7
0
如何将div放置在其容器的底部? - How can I position my div at the bottom of its container?

问题: Given the following HTML: 鉴于以下HTML: <div id="container"> <!-- Other elements here --> <div id="copyright"> Copyright Foo web designs </div> </div> I would like #cop......

富含淀粉
今天
10
0
学习编写编译器[关闭] - Learning to write a compiler [closed]

问题: Preferred languages : C/C++, Java, and Ruby. 首选语言 :C / C ++,Java和Ruby。 I am looking for some helpful books/tutorials on how to write your own compiler simply for......

技术盛宴
今天
17
0
OSChina 周一乱弹 —— 毛巾又怎么样?!我在乎的是大姐姐温柔的怀抱!

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《雨 因你而下,于你而止》- Seto 手机党少年们想听歌,请使劲儿戳(这里) @Dan...

小小编辑
今天
54
2

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部