C语言 有符号字符型输出 面试题

本文探讨了C语言中有符号字符型的输出问题,特别是数值溢出的现象。针对一道面试题,解释了为什么128在有符号字符型中会变为-128,并通过图表辅助理解。同时,文章还讨论了其他相关面试题目,包括无符号数的特点、strlen函数的工作原理以及有符号短整型的最大值转换等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.第一题

int main()
{
    int a = 128;
    printf("%u\n", a);
    system("pause");
}

输出结果
128

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char a = 128;
    printf("%u\n", a);
    system("pause");
}

输出结果
4294967168

这里写图片描述

因为有符号字符型其范围为-128~127
127用二进制表示为:0111 1111,
128表示为1000 0000,这里发生溢出,因为第一位为1,为符号位,表示负数,即-128

看到这里是不是一头雾水,网上有很多方法解释一同看完还是不懂。所以我画了一张图来解释

这里写图片描述
有符号字符型范围为-128~127

所以127的下一个数字是-128不是128

2.第二题

#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned i;
    for (i = 0; i >= 0; i--)
    {
        printf("%u\n", i);
    }
    system("pause");
}

这里写图片描述

为什么输出结果是这样呢?
无符号数永远大于0

2.1

#include <stdio.h>
#include <stdlib.h>
unsigned char i = 0;
int main()
{
    for (i = 0; i <= 255; i++)
    {
        puts("Hello World");
    }
}

3.第三题

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char a[1000];
    int i;
    for (i = 0; i < 1000; i++)
    {
        a[i] = -1 - i;
    }
    printf("%d\n", strlen(a));
    system("pause");
}

strlen()遇到0就停止,那么他什么时候遇到’\0’呢?
当i = 127的时候 a[i] = -128;那么他的下一个数字是多少呢?是-129吗?

4.第四题

int main()
{
    short num = 32767;
    short int a = num + 1;
    printf("%d\n", a);
    system("pause");
}

32767(有符号的短整型能表示的最大值)
结果:-32768
这里写图片描述

记:有符号的短整型能表示的最大值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值