c语言==笔试题6(25)

1、求输出结果:

unsigned short A = 10;
printf("~A = %u\n", ~A);
char c=128;
printf("c=%d\n",c);
解析:~A =0xfffffff5,int值 为-11,但输出的是uint。所以输出4294967285
第二题,c=0x10,输出的是int,最高位为1,是负数,所以它的值就是0x00的补码就是128,所以输出-128
答案: 4294967285,-128

2、写出输出结果

  void foo(void)
  {
      unsigned int a = 6;
      int b = -20;
      (a+b > 6) ? puts("> 6") : puts("<= 6");
  }
解析:当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。
答案: >6

3、 已知一个数组table,用一个宏定义,求出数据的元素个数

解析:未说明数组类型,因此用sizeof(table[0])表示数组类型大小
答案: #define NUM (sizeof(table)/sizeof(table[0]))

5、32位机器上定义以下结构体,请问sizeof(x)的大小是多少

struct  x
{
long long _x1;
char _x2;
int _x3;
char _x4[2];
static int _x5;
};
解析:long long32位机器中占8字节,结构体要考虑字节对齐的问题,x5在结构体里,是静态变量,不占结构体空间。

首先_x5是静态变量可以不用管它,其次是要考虑字节对齐的问题。对于结构体中没有含有结构体变量的情况,有两条原则:1)结构体变量中成员的偏移量必须是成员大小的整数倍;2)结构体的最终大小必须是结构体最大简单类型的整数倍。x1的偏移量是0,长度是8,符合;x2的偏移量是8,长度是1,符合;x3的偏移量是9,长度是4,不符合,需要在x2之后填充3字节使得x3的偏移量达到12;x4的偏移量是16,长度是2,符合;此时总长度为(8)+(1+3)+(4)+(2)=18,而最大简单类型为long long长度为8,因此需要在x4之后再填充6字节,使得总长度达到24可被8整除。因此sizeof(xx)的结果为24
答案:    24
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值