发布网友 发布时间:2022-09-28 14:32
共4个回答
热心网友 时间:2024-11-18 07:03
快过年了,不想干活了,帮楼主答疑吧。。
这个题目设计3个问题:
1 数据大小:
char在内存中占一个字节,取值范围为(0~255)之间。
short在内存中占二个字节,取值范围为(0~65535)之间。
楼主可以认为就是上图中的一个单元格。注:这里不讨论char和byte这种有符号无符号问题,怕楼主更晕。
2 联合体的数据存放:
联合体中的各个数据成员对应内存中一块存取区域,以最大长度的成员长度为主。看上图中,*代表联合体中的year,month,date,绿色代表byte[0~5]。这里分成两种颜色是标示2种数据类型在内存中的结构,实际在联合体中他们是同一块区域,也就有了对year,month,day赋值后,byte也有值的情况。
3 数值的存放:
比如上面year=2003以后,2003在内存中是怎么样存放的呢?我们知道一个单元格职能存放(0~255)之间的数据,2003明显不够存放,所以就要进位(放到第二个单元格),这里进位是逢256进位的,和我们平时使用的10进制进位类似。所以上图中第一个格子存放的是2003%256=211,第二个格子存放的是2003/256=7。 置于联系题中结果-45,只是因为char类型是有符号数,只能存放(-127~127)之间,211是其一种表现形式,如果楼主不能理解,就认为是211好了。
热心网友 时间:2024-11-18 07:03
2^8 = 256追答如果真的成功给一块内存赋值的话,旧值肯定被覆盖。
你画一下共用体的内存,分析下每一个字节怎么赋值的。
热心网友 时间:2024-11-18 07:04
256=16*16=2^8
热心网友 时间:2024-11-18 07:04
一个字节8位,共有2^8=256种变化追问那这里为什么要用256呀