栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

什么(危)?面试官考我数据存储的题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么(危)?面试官考我数据存储的题

目录

(1)

(2)

(3)

(4)

(5)

(6)

(7)


今天给大家带来的是有关于数据存储的几个题,下面正片直接开始!

(1)
#include 
int main()
{
    char a = -1;
    signed char b = -1;
    unsigned char c = -1;
    printf("a=%d,b=%d,c=%d", a, b, c);
    return 0;
}

输出结果:

注意:

有符号数与无符号数甚么时候才起作用?

在使用的时候,进行格式化输出的时候,会进行整型提升,如果是无符号数,无论符号位是0还是1,一律都补0,而对于有符号数,如果符号位是1,就补1,如果符号位是0,就补0。

(2)
#include 
int main()
{
    char a = -128;
    printf("%un", a);
    return 0;
}

输出结果:

(3)
#include 
int main()
{
    char a = 128;
    printf("%un", a);
    return 0;
}

输出结果:

(4)
#include
int main()
{
	int i = -20;
	unsigned  int  j = 10;
	printf("%dn", i + j);
}

输出结果:

虽然i+j的过程中发生了算数转换,但是不影响最后的结果,所以我们不做考虑。

(5)
#include
int main()
{
    unsigned int i;
    for (i = 9; i >= 0; i--)
    {
        printf("%un", i);
    }
}

输出结果:

后面将陷入死循环。

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

输出结果:

此时需要注意一点:有符号的11111111,这个数为原码,要想求其保存的是什么数据,就要把其转换成补码,转换为补码之后可得-1,然后依次可得10000001为-127,此时再看10000000,这个数是不需要计算的,有符号的二进制里面,只要遇到这个数就直接将其解析,因为这个数无法按照我们的减1取反的哪种方式来计算,所以直接将其解析为-128。

事实上,-128即11000 0000的补码形式(首位截断后)就是1000 0000,这也就印证了为什么计算机会直接将这个数字解析为-128。

由上面可得:

有符号的char类型所能表示的范围为-128 - 127。

无符号的char类型所能表示的范围为0 - 255。

这些数据的范围可以通过C语言跳转到相应的文档进行查看,首先先打出代码#include,右击limits.h,然后点击转到文档即可查看数据的范围。

(7)
#include 
unsigned char i = 0;
int main()
{
    for (i = 0; i <= 255; i++)
    {
        printf("hello worldn");
    }
    return 0;
}

输出结果:

死循环的打印hello world 

借用上面的结论,在unsigned char类型中,保存的数据范围永远处于0~255,所以会死循环的打印hello world。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604026.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号