鱼C论坛

 找回密码
 立即注册
查看: 1735|回复: 5

[已解决]int和char类型

[复制链接]
发表于 2022-8-10 22:15:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
IMG_20220810_221027.jpg
一本c语言的书上是这样写的,我不太理解。
'B'的数值是66,换算为二进制也是8位,为什么会变成’E'呢?
最佳答案
2022-8-10 22:21:13
应该就是指 “FATE” 在赋值给 char 变量的时候,前面的 "FAT"会被舍弃掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-10 22:21:13 | 显示全部楼层    本楼为最佳答案   
应该就是指 “FATE” 在赋值给 char 变量的时候,前面的 "FAT"会被舍弃掉

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
治愈罗小黑 + 5 + 5 + 3 嗯嗯,应该是这样,我说怎么理解不了....

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-10 22:25:19 | 显示全部楼层
只看图片的这部分 看不出来
弄一整页的图片
如果必要的话,弄一个整个章节的图片
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-10 22:36:20 | 显示全部楼层
人造人 发表于 2022-8-10 22:25
只看图片的这部分 看不出来
弄一整页的图片
如果必要的话,弄一个整个章节的图片

58U0ALJJO@1~8P$L1T}~VCB.png
前面的内容个人感觉关联不大...
感觉二楼的说法应该是对的...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-11 00:04:43 | 显示全部楼层
关联大了
我不看上面的内容,我就无法发现作者这里写错了,有两个错误
1. 首先,怎么定义字符常量'FATE'  ?
这样?
char grade = 'FATE';
还是这样?
int grade = 'FATE';
不管是哪样,都是错的
单引号里面只能有一个字符
char grade = '\0';
这里的单引号里面的确是有两个字符,一个 '\' 和一个 '0'
但是这两个字符是一个整体,这两个字符一起用来表示一个转义字符
'\0' 这是一个字符
那么 char grade = 'FATE'; 这是什么?
int grade = 'FATE'; 这又是什么?
单引号里面出现了多个字符,这是错误的
https://www.codenong.com/7755202/
https://www.dii.uchile.cl/~daesp ... 1999_definition.pdf

  1. The value of an integer character constant containing more than one
  2. character (e.g., 'ab'), [...] is implementation-defined.
复制代码
  1. An integer character constant is a sequence of one or more multibyte characters enclosed
  2. in single-quotes, as in 'x'. A wide character constant is the same, except prefixed by the
  3. letter L. With a few exceptions detailed later, the elements of the sequence are any
  4. members of the source character set; they are mapped in an implementation-defined
  5. manner to members of the execution character set.
复制代码
  1. An integer character constant has type int. The value of an integer character constant containing a single character that maps to a single-byte execution character is the numerical value of the representation of the mapped character interpreted as an integer. The value of an integer character constant containing more than one character (e.g., 'ab'), or containing a character or escape sequence that does not map to a single-byte execution character, is implementation-defined. If an integer character constant contains a single character or escape sequence, its value is the one that results when an object with type char whose value is that of the single character or escape sequence is converted to type int.
复制代码

这属于C语言中的未定义行为,就是不同的编译器很有可能会给出不一样的结果
我就把C语言中的未定义行为理解成是 “错误”
毕竟么,你在这一台电脑上编译的代码可以正常运行
把这个代码复制到另一台电脑,在那台电脑上编译的代码就无法正常运行了
这个版本的编译器编译的代码可以正常运行,升级了一下编译器,重新编译的代码就无法正常运行了
这不算是错误这算是什么?
所以,我就把C语言中的未定义行为理解成是 “错误”

2. char grade = 'B';
'B' 的ascii值是 66,就是0x42
作者的意思是先把0x00000042存储到一个32位的存储单元,然后再取出来,然后再把0x42存储到grade的位置?
但是这个 0x42 是直接包含在机器指令里面的,是直接把0x42存储到grade的位置
不是用一个32位的存储单元中转

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
治愈罗小黑 + 5 + 5 + 3 受教了,谢谢!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-11 00:55:40 | 显示全部楼层
人造人 发表于 2022-8-11 00:04
关联大了
我不看上面的内容,我就无法发现作者这里写错了,有两个错误
1. 首先,怎么定义字符常量'FATE'  ...

强!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 21:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表