整数在内存中的存储 - 存储的是二进制 - 二进制表示:原码、反码、补码 - 内存中存储的是补码
//1.整数在内存中存储的是二进制的补码;2.在调试窗口中观察内存的时候,为了方便展示,显示的是十六进制的值;3.存储的顺序是倒置的
//大端字节序存储:把低位字节的内容存储到高地址处,把高位字节的内容存储到低地址处
//小端字节序存储:把低位字节的内容存储到低地址处,把高位字节的内容存储到高地址处
//存储模式由硬件决定
//int main()
//{
// int n = 0x11223344;
// return 0;
//}
//int main()
//{
// int n = 1;
// if (*(char*)&n == 1)
// {
// printf("小端\n");
// }
// else
// {
// printf("大端\n");
// }
// return 0;
//}
//int check_sys()
//{
// int n = 1;
// return *(char*)&n;
//}
//
//int main()
//{
// int ret = check_sys();
// if (ret == 1)
// {
// printf("小端\n");
// }
// else
// {
// printf("大端\n");
// }
// return 0;
//}
//根据国际标准IEEE(电⽓和电⼦⼯程协会) 754,任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式:
//V = (−1)∗ S M ∗ 2E
//•(−1)S 表⽰符号位,当S = 0,V为正数;当S = 1,V为负数
//• M 表⽰有效数字,M是⼤于等于1,⼩于2的
//• 2
//E 表⽰指数位
//浮点数的存储其实存储的是S、M、E相关的值
//对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M
//对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M
//IEEE 754 规定,在计算机内部保存M时,默认这个数的第⼀位总是1,因此可以被舍去,只保存后⾯的
//xxxxxx部分。⽐如保存1.01的时候,只保存01,等到读取的时候,再把第⼀位的1加上去。这样做的⽬
//的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第⼀位的1舍去以后,等于可以保
//存24位有效数字。
// 存⼊内存时E的真实值必须再加上⼀个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023
//例:5.5 - 十进制的浮点数表示形式 - 101.1 - 1.011*2² - (-1)^0*1.011*2² - S=0 - M=1.011 - E=2
//int main()
//{
// char a = -1;//char到底是有符号还是无符号取决于编译器 - VS上char==signed char
// //11111111 - a
// //整型提升 - 11111111111111111111111111111111
// signed char b = -1;//内存中的最高位被当作符号位
// //11111111 - b
// //整型提升 - 11111111111111111111111111111111
// unsigned char c = -1;
// //11111111 - c
// //整型提升 - 00000000000000000000000011111111
// printf("a=%d,b=%d,c=%d\n", a, b, c);
// return 0;
//}
//int main()
//{
// char a = -128;
// //10000000000000000000000010000000
// //10000000 - a
// printf("%u\n", a);//%u - unsigned int - 认为a中存放的是无符号数
// //a是char类型,首先整型提升,补符号位 - 11111111111111111111111110000000
// return 0;
//}
//int main()
//{
// char a = 128;
// //00000000000000000000000010000000
// //10000000 - a
// printf("%u\n", a);
// //整型提升 - 11111111111111111111111110000000
// return 0;
//}
//int main()
//{
// char a[1000];//0~999
// int i;
// for (i = 0; i < 1000; i++)
// {
// a[i] = -1 - i;
// }
// //-1 -2 -3 -4 …… -127 -128 127 126 …… 0 -1 -2
// printf("%d", strlen(a));
// return 0;
//}
//unsigned char i = 0;//unsigned char的存储范围0~255
//int main()
//{
// for (i = 0; i <= 255; i++)
// {
// printf("Hello world\n");
// }
// return 0;
//}
//int main()
//{
// unsigned int i;//>=0
// for (i = 9; i >= 0; i--)
// {
// printf("%u\n", i);
// Sleep(1000);
// }
// return 0;
//}
//x86环境 小端字节序
//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);//%x - 打印十六进制整数
// return 0;
//}
//整型和浮点型在内存中的存储方式是不一样的
//int main()
//{
// int n = 9;
// float* pFloat = (float*)&n;
// printf("n的值为:%d\n", n);
// printf("pFloat值为:%f\n", *pFloat);
// *pFloat = 9.0;
// printf("n的值为:%d\n", n);
// printf("*pFloat值为:%f\n", *pFloat);
// return 0;
//}
//int main()
//{
// float f = 5.5f;
// //5.5
// //101.1
// //1.011*2
// //(-1)^0*1.011*2²
// //S=0 - M=1.011 - E=2
// //0100 0000 1011 0000 0000 0000 0000 - 二进制
// //40 B0 00 00 - 十六进制
// return 0;
//}