C语言--每日练习题--Day38

第一题

1. 下列代码的运行结果()

short i = 65537;
int j = i + 1;
printf("i=%d,j=%d\n", i, j);

A:i = 65537,j = 65538

B:i = 1,j = 2

C:i = -1,j = 0

D:i = 1,j = 65538

答案及解析 B

本题考查的是隐式类型转换,涉及到整型提升和截断;

65537的二进制位:0001 0000 0000 0000 0001

所以当65537给一个short类型的,一定会发生整型截断,因为65537是int类型的,4字节,32个比特位;而short是2字节,16个比特位;

所以真正是i得到的二进制数位:0000 0000 0000 0001

也就是i = 1

那么j = i + 1;就是普通加法,因为都是int类型,没有隐式类型转换啦;

所以i = 1,j = 2

第二题

2. 下列程序段运行后x的值是()

int main()
{
    int a = b = c = 0;
    int x = 35;
    if (!a)
        x--;
    else if (b)
        ;
    if (c)
        x = 3;
    else
        x = 4;
    reutrn 0;
}

A:3

B:4

C:35

D:34

答案及解析 B

本题考查的是if-else语句的认识,我们要知道谁跟谁是一个组的;

首先 if 和 else if 为一组,if(c)和else一组

然后 if 的条件判断0为假,非0为真;

是逻辑反,真变假,假变真

第三题

3. 下面的结构体的sizeof是多少()

struct T
{
    int iVersion;
    char cTag;
    char cAdv;
    int iUser;
    char cEnd;
};

A:11

B:12

C:13

D:16

答案及解析 D

又是内存对齐哦,大家要是前面的都做了的话,这样的题就不应该错了哈

相关博客:C/C++内存对齐规则(结构体、联合体、类)-CSDN博客

第四题

4. 下面代码的输出结果是()

    int x = 127;
    int z = 0;
    short y = -9;
    z = x + y;

A:x=0000007FH,y=FFF9H,z=00000076H

B:x=0000007FH,y=FFF9H,z=FFFF0076H

C:x=0000007FH,y=FFF7H,z=FFFF0076H

D:x=0000007FH,y=FFF7H,z=00000076H

答案及解析 D

首先答案是用16进制表示的,十进制数末尾用D表示,二进制末尾用B表示,十六进制数末尾用H表示,八进制末尾用O表示。 例如:101B 表示二进制数

之后我们就开始讲解本题:在转换为16进制之前,先算出他们的十进制

首先x肯定就是127,转换为16进制就是7F

y = -9;y是short类型,-9是int类型,会发生隐式类型的转换,一定要用补码!因为只要有关二进制的计算,都是用补码来的;

int--4字节--32比特位,shotr--2字节--16比特位,1比特位 = 1二进制位 

-9的二进制                      原码:1000....1001

按位取反,符号位不变:反码:1111....0110

加一                                 补码:1111....0111

32位截断为16位

补码:1111 1111 1111 0111

反码:1000 0000 0000 1000

补码:1000 0000 0000 1001

依旧是-9,所以我们会发现只要int类型数字的二进制,在16位之内是1就没事,截断也不影响大小;

y = -9 ,记住,计算机存的是补码,所以转换为16进制的应该是补码,

也就是:1111 1111 1111 0111  --> FFF7

第五题

5. 下面代码运行结果()

int main() 
{
    int a = 7, b = 8, *p, *q, *r;
    p = &a;
    q = &b;
    r = p;
    p = q;
    q = r;
    printf("%d,%d,%d,%d\n", *p, *q, a, b);
}

A:8,7,8,7

B:7,8,7,8

C:8,7,7,8

D:7,8,8,7

答案及解析 

这个题就是要知道,值可以被保存的

p最开始存a的地址,q最开始存b的地址

r = p,也就是 r 也存a的地址

p = q ,p又指向 q ,存的就是b 的地址;

q = r,q 指向 r ,q 存的就是 a 的地址;

所以现在就是 p存b地址,q存a地址,完成了交换

相关推荐

  1. C语言每日选择题—Day48

    2023-12-12 16:16:02       36 阅读
  2. C语言每日选择题—Day49

    2023-12-12 16:16:02       33 阅读
  3. C语言每日选择题—Day51

    2023-12-12 16:16:02       41 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-12 16:16:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-12 16:16:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-12 16:16:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-12 16:16:02       20 阅读

热门阅读

  1. YOLOv6 学习笔记

    2023-12-12 16:16:02       43 阅读
  2. Git 的基本概念和使用方式

    2023-12-12 16:16:02       36 阅读
  3. 光伏设计方案:实现清洁能源的未来

    2023-12-12 16:16:02       38 阅读
  4. Python基础知识学习

    2023-12-12 16:16:02       35 阅读
  5. Qt基础-修改Qt Creator界面字体

    2023-12-12 16:16:02       37 阅读
  6. 【Vue】使用moent转换GMT时间格式为北京时间

    2023-12-12 16:16:02       43 阅读
  7. 对接海康明眸门禁设备-查询人员信息

    2023-12-12 16:16:02       47 阅读
  8. 网络安全中的加解密问题

    2023-12-12 16:16:02       34 阅读
  9. ACWing week 3(C语言) 722.数字序列和它的和

    2023-12-12 16:16:02       38 阅读
  10. go语言利用反射实现reverse函数

    2023-12-12 16:16:02       33 阅读
  11. ChatGpt

    ChatGpt

    2023-12-12 16:16:02      40 阅读
  12. docker中CMD和ENTRYPOINT 的区别

    2023-12-12 16:16:02       40 阅读