• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

C语言面试题:无符号数与有符号数相加问题,附答案和详解

OC/C/C++ 水墨上仙 2013次浏览

这道C语言面试题要求写出下面代码的输出结果是什么,主要是关于无符号数与有符号数相加问题,付答案及详解。

#include <stdio.h>  
  
//无符号数与有符号数相加  
  
int main(int argc, char **argv)  
{  
    unsigned int a = 6;  
    int b = -12;  
    if(a+b > 0)  
    {   
        printf("dsds\n");  
        printf("a+b=%d\n" , a+b);  
        printf("a+b=%p\n" , (void *)(a+b));  
    }  
    else  
    {  
        printf("ssss\n");  
        printf("a+b=%d\n" , a+b);  
        printf("a+b=%p\n" , (void *)(a+b));  
    }  
    return 0;  
}  

答案:

dsds

a+b=-6

a+b=0xFFFFFFFA

原因:当无符号数与有符号数相加时,将相加后的结果转化为无符号数,为什么第一个结果是-6呢,因为%d输出的时候是按照有符号数输出的。第二个输出语句就是按照内存里的内容输出的。为什么是0xFFFFFFFA,-6的补码就是0xFFFFFFFA,计算机在内存中存储数据的格式是补码的格式,所以打印出来的结果就是一个大于0的数。这就充分说明了a+b>0了。


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明C语言面试题:无符号数与有符号数相加问题,附答案和详解
喜欢 (0)
加载中……