当前位置:首页 > 内存 > 正文

共同体所占内存长度

  • 内存
  • 2024-06-06 01:32:58
  • 9338

一、C语言共同体问题一个字节是8位,可以表示2位十六进制数,所以0相当于占位符
=======================================
变量占用的长度必须是8位的倍数
且字节必须是8位
所以必须占用10。1个字节和1也必须占用1个字节
所以这个团体在内存中的存储方式是这样的:
0A010000
那么如果这个团体以整数的形式显示。是0000010Aa的长度是4个字节;32位(我不确定,这似乎是今天的问题)
==================================
天哪!
可以通过查询来学习汇编语言
浮点数的结构与整数不同,随机写入的东西可能是无效的浮点数;其不同的原因非常复杂。也许是因为我没有两行的技巧。
海报如果你在学习C时总是遇到这样的问题,学习汇编后,您将能够自己解决所有这些问题。否则,你就会因为自己的问题而被折磨死。


二、c语言共同体求解#include
intmain(intargc,char*argv[])
{
unioncif_ty//union的定义很清楚了。它与结构体的区别在于两个变量共享内存中的同一位置。换句话说,一次只有一个变量有效,因为它位于内存中的同一位置,所以前一个变量值会被覆盖。并且不能再使用即使使用了,也不再是你想要的价值
//书上会详细解释,明白了这一点,你的问题就迎刃而解了。但话虽如此,你应该仔细阅读这本书。。
{
charc;
inti;
floatf;
}cif;//内存分配按照字节大小最大的类型,即union占用4bytes
cif.c='a';//cif.c='a';
printf("c=%c\n",cif.c);//输出a
cif.f=101.1;//f=101.1c有变量值的存储空间被f占用了,c的值没用
printf("c=%c,f=%f\n",cif.c,cif.f);//所以f的正常输出是101.1
cif.i=0x2341;//i值为0x2341f,c没有用
printf("c=%c,i=%d,f=%f",cif.c,cif.i,cif.f);//f的值不可靠,i的值为0x2341。c的值解释如下
return0;
}
i=0x2341内存存储为0x00002341(主要针对32位CPU,int针对64位CPU占用64位)
char占用8个字节。计算机访问c变量时,也访问了这块内存区域,所以取8位字节存入c变量中,取低位,丢弃高位,所以c为0x41,输出的字符是A
float和char类型也是如此,理解原理即可。如果你了解了char,你就会了解float,但是f=0.000000
是因为float在内存中的存储形式比较复杂。是二进制浮点运算的常用标准。涉及的内容很多,这里就不写了。。
虽然很累,但还是希望楼主采纳并认同,好人一生平安。
同时希望楼主仔细阅读本书。也许你错过的一个细节是一个非常重要、重要的知识点,导致你走了好几条弯路。不过,你还是需要多写代码,多练习,多阅读。多读书包括多读代码、提高代码分析能力、多读相关技术书籍。