[C语言] 有符号数加减问题

[复制链接]
1357|4
 楼主| 小小小小鸟 发表于 2017-1-4 12:02 | 显示全部楼层 |阅读模式
int8 c=0;
int8 d=1;
int8 e=0x78;

void main()
{

        while(1)
        {
                _clrwdt();
                c=(d-e);               
        }       

}

最后的结果 C=0x89;

用是的合泰单片机,这是为什么?



NE5532 发表于 2017-1-4 14:15 | 显示全部楼层
那你认为应该等于多少呢?
mcu5i51 发表于 2017-1-4 14:50 | 显示全部楼层
同2L;
口算不好,打开计算器,输入,结果也是0x89;
 楼主| 小小小小鸟 发表于 2017-1-4 15:15 | 显示全部楼层
NE5532 发表于 2017-1-4 14:15
那你认为应该等于多少呢?

版主你好,我现在搞清楚了,1的补码是00000001,0x78就是120,-120补码就是10001000,1+(-120)=10001001 就是0x89,还有个问题,0x89如果声明的是无符号数,那就是137,如果声明的是有符号数,那就是-119,无论是什么类型,计算机中存的都是10001001,如果我要与0对比,计算机为什么能判断当他为有符号数时会小于0成立?
NE5532 发表于 2017-1-4 15:18 | 显示全部楼层
因为有数据类型管着的啊,你声明了signed int,编译器就会调用signed的相关算法函数来处理,否则就用无符号的算法来弄。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

19

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部