c语言的问题 谢谢

来源:百度知道 编辑:UC知道 时间:2024/05/31 06:53:54
1.已知float y;int x=-3;,执行语句y=x%2;后,变量y的值为 。
答案是0,但我觉得是1。

2.
union myun
{
struct
{ int x,y,z;}u;
int k;
}a;
则sizeof(a)的值为 。里面那个共用体是算2还是6呢?
3.下程序片段的输出结果是多少?
int x=1;
printf("%d\n",~x); 答案是-2,但怎么算出来的?
5.下面程序的输出结果
#include <stdio.h>
main()
{int x=0
sub(&x,8,1);
printf("%d\n",x);
}
sub(int *a,int n,int k)
{if(k<=n) sub(a,n/2,2*k);
*a+=k;
}
参考答案是7 ,帮忙说说理由把

1、x%2应该等于-1,非0,亦非1

3、~是按位求反操作符,

1的二进制位表示形式为:

00000000 00000000 00000000 00000001

按位求反之后的值是

11111111 11111111 11111111 11111110

而这个结果正是-2的补码,所以~1的值是-2

5.这是个递归函数的调用问题,

第一次调用,k==1,n==8,k<n所以继续调用sub()

第二次调用,k==2,n==4,k<n所以继续调用sub()

第三次调用, k==4,n==2,k>n,所以执行*a+=k,

之后a==4,返回到上一次调用sub处,即第二次调用中,此时,继续执行*a+=k,由于k==2,而且*a此时值为4,所以执行之后 *a==6,返回到上一次调用sub处,即第一次调用中,继续执行*a+=k,此时k==1,*a==6,所以执行*a+=k之后,*a=7,返回到主函数中,即x==7

******************************************

2.在两字节的机器上,答案是6,在四字节的机器上,答案是12

1. 我的答案也是-1
2. sizeof(a)是不是应该等于6 啊,我不记得联合体怎么算了。
里面的结构体应该是算6.

联合体占的字节数是成员中所占字节数的最大直,故应为6