好吧实际上我已经研究了如何使用循环来使我的代码更高效,这样我就可以使用应该重复的特定代码块而无需一遍又一遍地输入它,并且在尝试使用我学到的东西之后编程太远了,我觉得是时候进入下一章学习如何使用控制语句来学习如何指示程序做出决定了。
但问题是,在我推进自己之前,我还有一些问题需要任何专家帮助解决以前的问题。实际上它是关于数据类型的。
A. 字符类型
- 我从 C 入门书 Plus 5th ed 中提取以下内容:
有点奇怪的是,C 将字符常量视为类型
int
而不是char
. 例如,在具有 32 位int
和 8 位的 ASCII 系统上char
,代码:char grade = 'B';
表示
'B'
为存储在 32 位单元中的数值 66,grade
以 66 存储的 ub ab 8 位单元结束。字符常量的这一特性使得定义一个字符常量成为可能,例如'FATE'
,在一个 32 位单元中存储四个单独的 8 位 ASCII 代码。但是,尝试将这样的字符常量分配给char
变量会导致仅使用最后 8 位,因此变量会获取值'E'
。
因此,我在阅读完这篇文章后做的下一件事当然是按照它提到的内容进行操作,即我尝试将单词存储在
FATE
变量中char grade
并尝试编译并查看将使用 存储printf()
的内容,而不是'E'
打印字符出来,我得到的是'F'
。这是否意味着书中有一些错误?或者有什么我误解了吗?
从上面的句子中,有一行说 C 将字符常量视为 type
int
。因此,为了尝试一下,我为该类型分配了一个大于255
, (ex356
) 的数字char
。由于
356
在 32 位范围内int
(我正在运行 Windows 7),因此我希望356
在使用说明符时它会打印出来%d
。但它不是打印
356
,而是给我100
,这是最后 8 位值。为什么会这样?我想
char == int == 32-bits
?(虽然它确实在 char 只是一个字节之前提到)。
B. Int 和 Floating 类型
我知道当
short
类型变量中的数字存储传递给可变参数函数或任何隐式原型函数时,它将自动提升为int
类型。浮点类型也会发生这种情况,当传递带有类型的浮点数时
float
,它将被转换为double
类型,这就是为什么没有float
类型说明符而只有%f
fordouble
和%Lf
for 的原因long double
。但是为什么有一个
short
类型说明符,虽然它也被提升但不是float
类型?为什么他们不只是给float
带有修饰符之类的类型的说明符%hf
?这背后有什么逻辑或技术吗?