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

请大家帮帮萌新!!!

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条)

报告相同问题?

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。