大家好,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流
本文由:残念ing原创CSDN首发,如需要转载请通知
个人主页:残念ing-CSDN博客,欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:残念ing 的专题实践练习系列专栏——CSDN博客
————————————————————CSDN———————————————————
目录
练习1:根据大小端的概念,设计一个小程序来判断当前机器的字节序——百度笔试题
练习2
练习3.1
练习3.2
练习4
练习5.1
练习5.2
练习6
关于浮点数在内存中的存储练习7:
练习1:根据大小端的概念,设计一个小程序来判断当前机器的字节序——百度笔试题
#include <stdio.h>
int check_sys()
{int i = 1;return (*(char *)&i);
}
int main()
{int ret = check_sys();if(ret == 1){printf("⼩端\n");}else{printf("⼤端\n");}return 0;
}
练习2
int main()
{char a = -1;//100000000000000000000000001//111111111111111111111111110//111111111111111111111111111//存储在a中要发生截断//char-a-11111111//111111111111111111111111111--整型提升//100000000000000000000000000//100000000000000000000000001signed char b = -1;//11111111-bunsigned char c = -1;//11111111-c//000000000000000000011111111-无符合整数提升就高位补0;printf("a=%d,b=%d,c=%d", a, b, c);//-1,-1,255//%d-十进制的形式打印有符号的整数return 0;
}
signed char 的取值范围:-128——127
unsigned char 的取值范围:0——255
练习3.1
//signed char 的取值范围:-128—127
//unsigned char 的取值范围:0—255
#include <stdio.h>
int main()
{char a = -128;//10000000-a//打印时整型提升//111111111111111110000000printf("%u\n", a);//%u 是十进制的形式打印无符合的整数return 0;
}
练习3.2
#include <stdio.h>
int main()
{char a = 128;//00000000000000000000000010000000//100000000-aprintf("%d\n", a);return 0;
}
练习4
#include <stdio.h>
#include<string.h>
int main()
{char a[1000];//-128~127//-1 -2 -3 ....-128 127126...3 2 1 0 -1 -2....int i;for (i = 0; i < 1000; i++){a[i] = -1 - i;}printf("%d", strlen(a));//求字符串长度找的是\0,\0 的ASCII码的值是0//128+127= 225return 0;
}
练习5.1
#include <stdio.h>
unsigned char i = 0;
int main()
{for (i = 0; i <= 255; i++)//死循环{printf("hello world\n");}return 0;
}
练习5.2
#include <stdio.h>
int main()
{unsigned int i;//死循环for (i = 9; i >= 0; i--){printf("%u\n", i);}return 0;
}
练习6
#include <stdio.h>
int main()
{int a[4] = { 1, 2, 3, 4 };int* ptr1 = (int*)(&a + 1);//跳过整个数组int* ptr2 = (int*)((int)a + 1);//跳过一个字节printf("%x,%x", ptr1[-1], *ptr2);//ptr1[-1]--*(ptr1—1)return 0;
}
关于浮点数在内存中的存储练习7:
//整数的存储方式和浮点数的存储方式不同
#include <stdio.h>
int main()
{int n = 9;float* pFloat = (float*)&n;//强制类型转换printf("n的值为:%d\n", n);printf("*pFloat的值为:%f\n", *pFloat);*pFloat = 9.0;printf("num的值为:%d\n", n);printf("*pFloat的值为:%f\n", *pFloat);return 0;
}
解析:
为什么 9 还原成浮点数,就成了 0.000000 ?
n=9 的二进制序列为:000000000000000000000000000001001
将其进行拆分后得:s=0;E=00000000;M=000000000000000000001001;
由于E全为0;所以浮点数V就写为:
V=(-1)^0 × 0.00000000000000000001001×2^(-126)=1.001×2^(-146)
可以看出V是⼀个很⼩的接近于0的正数,所以⽤⼗进制⼩数表⽰就是0.000000。
浮点数9.0,为什么整数打印是 1091567616 ?
⾸先,浮点数9.0 等于⼆进制的1001.0,即换算成科学计数法是:1.001×2^3
所以:9.0 = (−1)^ 0 (1.001) *2^3
可以知道:S=0;E=3+127=130;M=00100000000000000000000;
所以,写成⼆进制形式,应该是S+E+M,即0 10000010 001 0000 0000 0000 0000 0000
这个32位的⼆进制数,被当做整数来解析的时候,就是整数在内存中的补码,原码正是 1091567616 。