- 请简述大端字节序和小段字节序的概念,并设计一个小程序来判断当前机器的字节序。(10分)
解析:
- 上一篇文章已经讲述了大端字节序和小端字节序的概念,这里就不在累述。
- 我们来分析一下编程实现:
(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; }
有没有想到呢?a,b,c是等于-1吗?请看答案!
解析:
#include
int main()
{
char a = -128;
printf("%u\n",a);
return 0; }
解析:
#include
int main()
{
char a = 128;
printf("%u\n",a);
return 0; }
4.
int i= -20;
unsigned int j = 10;
printf("%d\n", i+j);
//按照补码的形式进行运算,最后格式化成为有符号整数
答案是-10吗??,请看答案!
5.
unsigned int i;
for(i = 9; i >= 0; i--) {
printf("%u\n",i);
}
答案是??
Why???
解析:
- 由前面几题可知,%u为无符号整型,所以i恒大0
- 当i减小到0时,它将从32位的最大二进制数开始减,如此往复循环。
int main()
{
char a[1000];
int i;
for(i=0; i<1000; i++)
{
a[i] = -1-i;
}
printf("%d",strlen(a));
return 0; }
解析:
- a为char类型,它在内存中占8个比特,最高位为符号位;
正数范围为:0000 0000 - 0111 1111 即:0-127;
负数范围为:1000 0000 - 1111 1111 即:-128 - 0;
故:char类型取值范围为:-128 到 127;- 所以计算数组a的长度为:128+127 = 255.
#include
unsigned char i = 0;
int main()
{
for(i = 0;i<=255;i++)
{
printf("hello world\n");
}
return
答案是…???
死循环。你做对了吗?
解析:
- 由上一题可知,char类型的取值范围为:-128到127,永远不会取到255,故死循环!
感谢你的支持,如果本文有错误以及不足之处,请不吝赐教;如果本文对你有所帮助,麻烦你动动小手点个赞,你的支持就是小编最大的动力!
最后,预告一下下一篇文章,详细探究浮点数在内存中的存储方式;点个关注,一起进步!