数据存储题 练手

Posted 王嘻嘻-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据存储题 练手相关的知识,希望对你有一定的参考价值。

练习一

//输出是什么?
#include <stdio.h>
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;
}

-1,-1,255 

解释:无符号数-1在内存中的存储二进制(补码)序列为1111 1111

练习二

//输出是什么?
#include <stdio.h>
int main()
{
    char a = -128;  //内存中存储的二进制序列是10000000
    printf("%u\\n",a);
    return 0;
}

4294967168

解释:规定-128二进制序列为1000 0000, 无符号整形输出的二进制序列是1111 1111 1111 1111 1111 1111 1000 0000

练习三

//输出是什么?
#include <stdio.h>
int main()
{
    char a = 128;
    printf("%u\\n",a);
    return 0;
}

4294967168

解释:char类型的128存储的二进制为1111 1111 1111 1111 1111 1111 1000 0000

练习四

int i= -20;              //存储为补码 1111 1111 1111 1111 1111 1111 1110 1100
unsigned  int  j = 10;   //存储为补码 0000 0000 0000 0000 0000 0000 0000 1010
printf("%d\\n", i+j);     //          1111 1111 1111 1111 1111 1111 1111 0110 原码
                         //          1000 0000 0000 0000 0000 0000 0000 1010 补码 -10
//按照补码的形式进行运算,最后格式化成为有符号整数

输出为-10

练习五

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

程序运行为死循环。

解释:存在隐式转换,--i 为0时,无符号整型无负数,--i =4294967295(最大int值),然后 --i 一直执行直到 i = 0 …… 重复操作

练习六

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

输出结果255

解释:char类型,当 a[i] 减小到-128时越界,开始从最大值127减小,一直减小到0。strlen识别到的是’\\0’,strlen不将0计入总长。 128+128-1=255

练习七

#include <stdio.h>
unsigned char i = 0;
int main()
{
    for(i = 0;i<=255;i++)
   {
        printf("hello world\\n");
   }
    return 0; 
}

 输出结果为hello world死循环

解释:无符号char类型只有8个比特位,表示数的最大值为255,当 i 的值从 0 加至 255 时,再加1会发生截断,i 变为0 ,从0开始反复操作。

以上是关于数据存储题 练手的主要内容,如果未能解决你的问题,请参考以下文章

面试练手题集(网站推荐)

前端面试题-

真香!值得收藏的30道Python练手题(附详细答案)

前端面试题之手写promise

day-1.python初学者练手题

KMP——模板 练手题