#include<stdio.h>
#include<stdlib.h>
union
{
int i;
char x[2];
}a;
int main()
{
a.x[0]=11;
a.x[1]=1;
printf("%d",a.i);
system("pause");
return 0;
}
那为什么乘以2的8次方呢?
还有就是这里的‘1’和‘11’哪个在高位?哪个在低位?
按照Intel的cpu体系,高字节在后,而数组从下标低的开始向高位存放,所以11是低位,1是高位
为什么乘2 的8次方:因为1个字节就是二进制的8位
C语言联合体问题,为什么输出267啊,求高手解答,谢谢 啊!!!
因为是联合体,所以i 和x数组共享存储空间,因此从i 的角度来看,其低两个字节的内容就是这个11 和1,因此i 的值就是2的8次方乘1 + 11 = 267
关于C语言联合体的问题
在C语言中,联合体是一种允许一个变量可以存储不同类型的值的数据结构。在上述内存布局中,我们拥有四个字节分配给整数i,以及两个字节分配给字符数组x[2]。利用公式,我们可以将整数分解为四个字节。对于字符数组,第一个字符存储在第一个字节,第二个字符存储在第二个字节。在提供的代码示例中,我们...
关于一个C语言共用体赋值问题
出现你这种情况的原因可能是:int占4位,float占4位,char占1位,当赋值float后int的就完全更改了,当赋值char的时候,其实float的值也是更改了的,但是char因为占的位少,可能只改变了float的低位空间,也就是小数点后很多位的值,这样输出来的时候因为float就显示小数点后的几位,很后面的就被约为0...
c语言联合体内存计算
占9个字节 c占8个字节,所以按照最大的计算,联合体啊占大小9个字节,但是他还要满足第二个条件,就是大小必须是内部成员基础类型的整数倍。你的基础类型是int 4字节 char 1字节 double 8字节 取公因数并且要比9大所以他的大小事16个字节。第二个问题,你直接为一个该结构体的指针赋值(这种做法...
一道C语言
你这个题目,严格的说,答案是不确定的,因为你的联合体没有初始化,所以除了你赋值的c以外,其他的数据都是随机的,造成结果是每次运行都不一样 因此,我在这里假设,你的联合体中的数据都被初始化为2进制的0.(这里只需要在给c[0]赋值之前加上一句x.i = 0即可)接着,联合体中的所有数据元素...
c语言编程问题,求高手解答(高分)
可以执行,只是以下几个小问题:一、第一行包含的文件不存在,这一行应该删除。二、定义了argc、argv两个变量没有使用,编译会有警告,可以删除他们或者不管,最好改为:int main()三、scanf输入n和k的时候,中间有个逗号分隔,这样输入的时候会麻烦,最好改为:scanf("%d%d",&n,&k);...
c语言 很纠结的问题 选择 求高手解答。
如果按照你的程序来看,底下第一题是没有答案的;因为你的程序输出结果为39 和9;你定义的s是个联合,所以取最大成员的空间,那么应该是两个int,也就是说8个字节;所以赋值后内存如下 39 00 00 00 38 00 00 00 00 所以取s.b时也是取4个字节,而且打印成16进制形式,结果为39 取s.c时就...
关于C语言求一串阶乘的和,求高手帮我看一下!
如果在计算20以内的阶乘之和时,使用常规的整型变量,可能会出现计算结果错误的问题。原因在于阶乘之和超过了整型变量的存储上限。例如,计算结果实际为2561327494111820313,而代码输出为268040729。这主要是因为计算过程中数值超过了整型的最大值。解决此问题的方法是使用浮点型变量进行计算,以避免整数溢出。
为什么最后输出的c不是200而是0啊,求高手解答~
最后输出的是全局变量c:也就是一开始定义的,等于200的c是局部变量,定义局部变量c时,在它的范围内全局变量c暂时被屏蔽了。所以全局变量并没有被赋值。。
C语言中scanf中输入问题(高手进,谢谢)
楼主您好:很高兴为您解答,这个是不能那个随意组合输入的,要看你的scanf的语句了,如果%d在前的话,后面肯定是数字在前的。希望我的回答对你有所帮助。