数据存储题 练手
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开始反复操作。
以上是关于数据存储题 练手的主要内容,如果未能解决你的问题,请参考以下文章