| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2169 人关注过本帖
标题:求负数的补码问题
只看楼主 加入收藏
huxs
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2007-10-7
收藏
 问题点数:0 回复次数:8 
求负数的补码问题
怎么求一个负数的补码呢??我写了个程序但是老是不对..帮忙看看
#include<stdio.h>
#define N 16
int buma(int a)
{
int b,c;
b=(-1)<<(N-1);
c=((~a)|b)|1;

return c;
}
int main()
{
int a,b;
scanf("%d",&a);
printf("%x %d\n",a,a);
b=buma(a);
printf("%x %d\n",b,b);
return 0;
}
搜索更多相关主题的帖子: 负数 
2007-11-09 11:11
huxs
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2007-10-7
收藏
得分:0 
原来是忘进位了,终于搞懂..
2007-11-09 11:22
万兽无缰
Rank: 1
等 级:新手上路
威 望:1
帖 子:296
专家分:0
注 册:2007-8-27
收藏
得分:0 

女朋友问我想怎么死~~~
             我说我想"爽死"
2007-11-09 11:25
nianshi
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-7
收藏
得分:0 
由原码到补码:取反加一。
int buma(int a)
{
int b,c;
if(a<0)
b=-b;/*化成正数*/
c=b^-1;/*得反码*/
c=c|1;/*末位加1*/
return c;
}
想了想 好像不行 还请高手指正 :)

[此贴子已经被作者于2007-11-9 11:30:34编辑过]


行至水穷处 坐看去起时
C语言QQ群1:51871776  群2:26313099  群3:47145282
2007-11-09 11:29
chmlqw
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-10-11
收藏
得分:0 
我觉得好象电脑里面就是用补码来存放数据的,所以你输入一个数,他的十六进制就是补码了,所以不用在变了吧........
2007-11-09 11:58
huxs
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2007-10-7
收藏
得分:0 
由原码到补码:取反加一。
int buma(int a)
{
int b,c;
if(a<0)
b=-b;/*化成正数*/
c=b^-1;/*得反码*/
c=c|1;/*末位加1*/
return c;
}
想了想 好像不行 还请高手指正 :)
为何要先把它化成正数呢,各位取反又不是说把负数变成正数,肯定不行的,而且好象加一不能用或,用或不会进位,所以c=c|1;也应改成:c=c+1;
2007-11-09 22:17
rayxiang
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2007-10-22
收藏
得分:0 
c=c|1,好象不能写成c=c+1;因为"|"的意思是有1取1,如果是两个一的话只能得1而不是0.

...........没 有 音 乐 就 没 法 活............ ...........不 会C 语 言 我 可 以 问...........
2007-11-09 23:41
huxs
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2007-10-7
收藏
得分:0 

LS说的对,呵呵,没注意到这点,谢谢.
不过好象负数的补码说的就是:符号位不变,其他各位取反,然后整体加1,应该用c=c+1;我觉得..

2007-11-10 13:32
zhangjian110
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-10-7
收藏
得分:0 
取反加一就OK了
2007-11-10 13:42
快速回复:求负数的补码问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021917 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved