aniox 2019-07-01 11:06 采纳率: 100%
浏览 544
已采纳

请大家帮帮萌新!!!

C语言自学中。。。。。

C primer plus第三章中写道:

奇怪的是C语言将字符常量视为int类型而非char类型。
例如在int位32位 char为8位的ASCII系统中有下面代码

char grade = ‘B‘,

    本来‘B’对应的66储存在32位的储存单元中,现在却可以储存在八位的单元中(grade)。利用字符常量的这种特性,可以定义一个字符常量'FATE',即把四个独立的八位ASCII码储存在一个32位存储单元中。如果把这样的字符常量赋给char类型变量grate,只有最后八位有效。因此,grade的值是'E'。

    这段话怎么理解,为什么B就变成了E了,
    66的二进制是1000010 八位储存是01000010
    那FATE就是四个01000010
    那么后八位是不是还是01000010吗?
    那么为什么grade的值会变成‘E’
    E的ASCII是69,换成二进制储存是01000101难道后八位是这个?
    求解答!!!!!!!谢谢!!!!!!
  • 写回答

2条回答 默认 最新

  • threenewbee 2019-07-01 12:40
    关注

    他的意思是

    #include <stdio.h>
    
    int main()
    {
        char ch2 = 'FATE';
        char grade = 'B';
        printf("%c\n", grade);
        grade = ch2;
        printf("%c\n", grade);
        return 0;
    }
    

    结果是
    B
    E

    短短一小段程序,你要理解内存怎么分布的,ascii怎么回事,还有,你用的X86 CPU是一种little endian的处理器。所以明明是 FATE 结果 E 跑前面去了,你一个不理解,就完全不理解。更糟糕的是,万一你用了手机写程序,而手机是 big endian的,那么结果输出就是BF了。

    初学者学 C语言能学到怀疑人生。

    顺便说一下,C语言不适合自学,学了也没啥卵用。
    很多人反驳说,C语言可以写操作系统啊,问题是你一个初学者又不是奔着为国家编写操作系统的使命去的,写操作系统和你有一毛钱关系不?
    如果你学C语言感觉困难很大,建议你换一种语言。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题