计算机源码和补码问题

钟居祥瑞 2016-07-01 08:55:23
各位大神,大家好!
小弟在编写程序时,发现 负数在计算机中是以补码的形式存储的,最高位是符号位
于是小弟采用-25实验了一下,其中-25的原码二进制是1000 0000 0000 0000 0000 0000 0001 1001
-25的补码是1111 1111 1111 1111 1111 1111 1110 0111

int main( )
{
int a=0,b=0;
b=0xffffffffe7;//-25的补码
a=0x8000019;//-25的原码
printf("a=%d\n",a);
printf("b=%d\n",b);
getch();
return 0;
}
为什么a=134217753而不是25;为什么b=-25,请各位大神帮我解答一下
...全文
377 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
钟居祥瑞 2016-07-03
  • 打赏
  • 举报
回复
因为:补码=源码的反码+1 所以:源码=补码-1 再取反 1111 1111 1111 1111 1111 1111 1110 0111 减去一 等于 1111 1111 1111 1111 1111 1111 1110 0110 再取反:0000 0000 0000 0000 0000 0000 0001 1001 为源码。。。 亲,这个0000 0000 0000 0000 0000 0000 0001 1001应该是正25的源码。
ccrun.com 2016-07-02
  • 打赏
  • 举报
回复
0x8000019 0x80000019
draculamx 2016-07-01
  • 打赏
  • 举报
回复
你自己都说了“负数在计算机中是以补码的形式存储” 那么-25,存储的时候就是 1111 1111 1111 1111 1111 1111 1110 0111,所以-25的源码应该在这个补码的基础上去计算,而不是 1000 0000 0000 0000 0000 0000 0001 1001 这个。。
draculamx 2016-07-01
  • 打赏
  • 举报
回复
你的补码算错了。。。 因为:补码=源码的反码+1 所以:源码=补码-1 再取反 1111 1111 1111 1111 1111 1111 1110 0111 减去一 等于 1111 1111 1111 1111 1111 1111 1110 0110 再取反:0000 0000 0000 0000 0000 0000 0001 1001 为源码。。。

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧