我正在读一本名为“ C Primer Plus”的书,学习C语言。目前,我正在阅读有关C数据类型(第3章)的问题。
在书中写道:>
字符常量和初始化
[...]在单引号之间包含的单个字符是C字符常量。 [...]因为字符实际上是作为数字存储的,所以您也可以使用数字代码来分配值。 [...]有点奇怪,C将字符常量视为int类型而不是char类型。例如,在具有32位int和8位char的ASCII系统上,代码
char grade = 'B';
将'B'表示为以32位为单位存储的数值66,但是等级以以8位为单位存储的66结束。
[我对这部分的理解是,声明语句
char grade = 'B';
将在两个位置存储其char变量和字符常量,一个以32位为单位存储为数值66,而在8处以66存储该变量grade
。位单位。 (这有点令人困惑。)然后,书中接下来的两个句子是:
字符常量的这种特性使得可以定义一个字符常量,例如'FATE',并以32位为单位存储四个单独的8位ASCII码。但是,尝试将这样的字符常量分配给char变量将导致仅使用最后8位,因此该变量将获得值'E'。
我在这里理解的是,一个多字符常量是可能的,这与本书开始时给出的定义不同。但是,只有在上一部分中提到的两个位置之一才有可能。因为字符常量在C中是
int
类型,并且int
在这里是32位,所以'FATE'有4个字符,每个8位。因此,4 * 8 =32。但是char变量只有8位空格,因此将仅存储最后一个字母。
并且,为了应用知识,我尝试了
/* test.c */ #include <stdio.h> int main(void) { char grade = 'FATE'; printf("%d, %c", grade, grade); return 0; }
这在编译时给了我一些警告。警告是多字符字符常量,并在隐式常量转换中溢出。
然后我尝试使用“ FAT”,“ FA”和“ F”。仅'F'有效。
最后,我的问题是:
int
单元仅为8位字节?我正在读一本名为“ C Primer Plus”的书,学习C语言。目前,我正在阅读有关C数据类型(第3章)的问题。在书中,字符常量和...