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

八大山人 分享于 18小时前 2113阅 0人收藏此代码, 我要收藏

这道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;  
}  


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

标签:
  • 面试题
  • 无符号数
  • C语言