13.数据在内存中的存储

一.整数在内存中的存储

二.大小端字节序和字节序判断

cpp 复制代码
int main()
{
	int a = 10;//0x 00 00 00 0a
	int b = 0x11223344;

	return 0;
}

1.检测大小端代码

cpp 复制代码
//写一个代码,来判断当前机器是大端还是小端?

int main()
{
	int a = 1;
	char* p = (char*)& a;
	if (*p == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}

	return 0;
}

int main()
{
	int a = 1;
	if (*(char*)&a == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}

	return 0;
}



int check_sys()
{
	int a = 1;
	//1. 取出a的地址
	//2. 强制类型转换成char*后解引用,只取a的第一个字节的数据
	//3. 如果取出是1,就是小端,取出是0就是大端
	return *(char*)&a;
}

int main()
{
	int ret = check_sys();
	if (ret == 1)
		printf("小端\n");
	else
		printf("大端\n");

	return 0;
}

2.练习二

cpp 复制代码
#include <stdio.h>

int main()
{
   char a = -1;
   //10000000000000000000000000000001
   //11111111111111111111111111111110
   //11111111111111111111111111111111
   //存储在a中要发生截断
   //11111111 - a
   //11111111111111111111111111111111
   //10000000000000000000000000000000
   //10000000000000000000000000000001
   //
   signed char b = -1;
   //11111111 - b
   //
   unsigned char c = -1;
   //11111111 - c
   //00000000000000000000000011111111
   //
   printf("a=%d,b=%d,c=%d", a, b, c);
   //-1 -1 255
   //%d - 十进制的形式打印有符号的整数
   //
   return 0;
}

整型提升按照我们的有无符号位进行提升

3.练习三

cpp 复制代码
#include <stdio.h>

int main()
{
   char a = -128;
   //10000000000000000000000010000000
   //11111111111111111111111101111111
   //11111111111111111111111110000000
   //10000000 - a
   //打印时发生整型提升
   //11111111111111111111111110000000
   //
   printf("%u\n", a);//4,294,967,168
   //%u 是十进制的形式打印无符号的整数
   //
   return 0;
}
cpp 复制代码
#include <stdio.h>
int main()
{
   char a = 128;
   //00000000000000000000000010000000
   //10000000 - a
   //
   printf("%u\n", a);
   return 0;
}

这个结果和上面的是一样的

4.练习四

cpp 复制代码
int main()
{
   char a[1000];
   //-128~127
   //-1 -2 -3 ... -128 127 126 125 ... 5 4 3 2 1 0 -1 -2 ... -128 127 126 ... 5 4 3 2 1 
   //128+127 = 255
   int i;
   for (i = 0; i < 1000; i++)
   {
       a[i] = -1 - i;
   }
   printf("%d", strlen(a));//求字符串长度找的是\0,\0的ASCII码值是0,其实找的就是0
   //255
   return 0;
}

5.练习五

cpp 复制代码
#include <stdio.h>

unsigned char i = 0;
//0~255

int main()
{
   for (i = 0; i <= 255; i++)
   {
       printf("hello world\n");
   }
   return 0;
}

会死循环,这里unsigned char 最大255

6.练习六

cpp 复制代码
#include <stdio.h>
#include <windows.h>

int main()
{
   unsigned int i;
   //死循环
   for (i = 9; i >= 0; i--)
   {
       printf("%u\n", i);
       Sleep(1000);//睡眠1秒
   }

   return 0;
}

和上面是一样的,也会死循环

7.练习七

cpp 复制代码
#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);
   return 0;
}

%x是以16进制进行打印

三.浮点数在内存中的存储

1.练习

cpp 复制代码
#include <stdio.h>

int main()
{
   int n = 9;
   float* pFloat = (float*)&n;//int*

   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;
}

2.浮点数的存储

cpp 复制代码
10:       5.5
2:        101.1
科学计数法:1.011 * 2^2
         (-1)^0 *1.011 *2^2
S = 0
E = 2
M = 1.011

回到刚刚那个题目

cpp 复制代码
#include <stdio.h>

int main()
{
   int n = 9;
   float* pFloat = (float*)&n;//int*

   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;
}
cpp 复制代码
int main()
{
	float f = 99.7f;
	printf("%f\n", f);
	return 0;
}
相关推荐
D_evil__1 小时前
【Effective Modern C++】第三章 转向现代C++:16. 让const成员函数线程安全
c++
微风中的麦穗1 小时前
【MATLAB】MATLAB R2025a 详细下载安装图文指南:下一代科学计算与工程仿真平台
开发语言·matlab·开发工具·工程仿真·matlab r2025a·matlab r2025·科学计算与工程仿真
2601_949146532 小时前
C语言语音通知API示例代码:基于标准C的语音接口开发与底层调用实践
c语言·开发语言
开源技术2 小时前
Python Pillow 优化,打开和保存速度最快提高14倍
开发语言·python·pillow
学嵌入式的小杨同学2 小时前
从零打造 Linux 终端 MP3 播放器!用 C 语言实现音乐自由
linux·c语言·开发语言·前端·vscode·ci/cd·vim
wfeqhfxz25887822 小时前
YOLO13-C3k2-GhostDynamicConv烟雾检测算法实现与优化
人工智能·算法·计算机视觉
Aaron15883 小时前
基于RFSOC的数字射频存储技术应用分析
c语言·人工智能·驱动开发·算法·fpga开发·硬件工程·信号处理
Queenie_Charlie3 小时前
前缀和的前缀和
数据结构·c++·树状数组
mftang3 小时前
Python 字符串拼接成字节详解
开发语言·python
爱编码的小八嘎3 小时前
C语言对话-21.模板特化,缺省参数和其他一些有趣的事情
c语言