C语言中的打印类型转换类型

C语言中的打印类型转换类型,c,types,printf,typecasting-operator,C,Types,Printf,Typecasting Operator,但是如果编译了下面的代码,控制台将输出值53。为什么打印castChar时打印的内容与打印castChar时打印的内容不同 The value is: 5 因为castChar的值是整数值5,而realChar的值是字符值“5”ASCII 53的整数编码。这些值不相同 铸造与此无关。或者,更准确地说,将nr强制转换为char不会给出字符值“5”,它只是将整数值5指定给更窄的类型 如果预期输出为5,则需要使用%c说明符而不是%d说明符打印realChar 因为castChar的值是整数值5,而r

但是如果编译了下面的代码,控制台将输出值53。为什么打印castChar时打印的内容与打印castChar时打印的内容不同

The value is: 5
因为castChar的值是整数值5,而realChar的值是字符值“5”ASCII 53的整数编码。这些值不相同

铸造与此无关。或者,更准确地说,将nr强制转换为char不会给出字符值“5”,它只是将整数值5指定给更窄的类型

如果预期输出为5,则需要使用%c说明符而不是%d说明符打印realChar

因为castChar的值是整数值5,而realChar的值是字符值“5”ASCII 53的整数编码。这些值不相同

铸造与此无关。或者,更准确地说,将nr强制转换为char不会给出字符值“5”,它只是将整数值5指定给更窄的类型

如果预期输出为5,则需要使用%c说明符而不是%d说明符打印realChar

char5和'5'不是一回事

文字“5”是表示字符5的整数值。它的价值取决于平台。假设字符采用ASCII表示,则为53

文字char5是已转换为char类型的整数值5。这意味着它在施法后保留5的值。

char5和'5'不是一回事

文字“5”是表示字符5的整数值。它的价值取决于平台。假设字符采用ASCII表示,则为53



文字char5是已转换为char类型的整数值5。这意味着它在转换后保留5的值。

因为字符串“5”的ASCII值是53。如果要将其打印为字符串,请使用%cI,以了解什么是ASCII以及printf的工作原理。再看一遍代码,castChar是一种类型castedchar。它会打印5,这是ASCII的转换值。realChar初始化为char,而不是castChar类型。两者都是字符,但打印出的值不同。字符5和“5”的含义完全不同。@OldProgrammer“5”不是字符串,而是字符。字符串在C中是双引号。因为字符串“5”的ASCII值是53。如果要将其打印为字符串,请使用%cI,以了解什么是ASCII以及printf的工作原理。再看一遍代码,castChar是一种类型castedchar。它会打印5,这是ASCII的转换值。realChar初始化为char,而不是castChar类型。两者都是字符,但打印出的值不同。字符5和“5”的含义完全不同。@OldProgrammer“5”不是字符串,而是字符。字符串在C中是双引号。我听说在C中我们可以使用其他字符集而不是ASCII,是否可能在字符中使用realChar realChar='5';与53的值不同?这是否意味着强制转换整数的最大值不同于非强制转换整数?@Esmaele:C将其留给底层平台-只要支持基本字符集且十进制数字的编码是连续的,它并不真正关心底层表示形式是ASCII还是EBCDIC或其他任何形式。@MoonOnAStick:不太清楚这是什么意思。如果尝试将整数值强制转换为太小而无法容纳的有符号整数类型,例如,signed char x=signed char 12345;,您将得到一个实现定义的结果或陷阱。如果您试图将整数值强制转换为太小的无符号类型,您将得到模数。@Esmaele:Decimal等效245,但是是的,它将是与“5”的ASCII代码不同的值。我听说在C中,我们可以使用其他字符集而不是ASCII,是否可能在字符中使用realChar realChar='5';与53的值不同?这是否意味着强制转换整数的最大值不同于非强制转换整数?@Esmaele:C将其留给底层平台-只要支持基本字符集且十进制数字的编码是连续的,它并不真正关心底层表示形式是ASCII还是EBCDIC或其他任何形式。@MoonOnAStick:不太清楚这是什么意思。如果尝试将整数值强制转换为太小而无法容纳的有符号整数类型,例如,signed char x=signed char 12345;,您将得到一个实现定义的结果或陷阱。如果试图将整数值强制转换为太小的无符号类型,则会得到模数。@Esmaele:Decimal等效值245,但是是的,它将是一个不同于“5”的ASCII代码的值。如果类型强制转换的行为与强制转换的类型不同,那么类型强制转换有什么意义?通常应避免强制转换。几乎总是有一种方法可以将使用类型转换的代码写入不使用它的更干净的代码中。C中的类型转换将用于重新解释类型
作为另一种类型,例如有符号整数作为无符号整数。严格别名要求对象只能被其自身的类型或字符解释。因此,您有时会看到对象指针被视为char*,有时这将通过强制转换来完成。@MoonOnAStick:它的行为确实类似于强制转换的类型-如有必要,被强制转换的值将转换为不同的表示形式。不过,它不会更改该值。同样,整数值5和字符值“5”不相同,简单强制转换不会将两者转换为另一个。需要强制转换的另一种情况是确保将指针传递到期望看到空指针的变量参数函数中。由于NULL可以定义为一个裸0,因此它将作为一个int传递,而不使用强制转换。如果它的行为与强制转换的类型不同,那么类型强制转换有什么意义?通常应避免强制转换。几乎总是有一种方法可以将使用类型转换的代码写入不使用它的更干净的代码中。C中的类型转换将用于将类型重新解释为不同的类型,例如将有符号整数解释为无符号整数。严格别名要求对象只能被其自身的类型或字符解释。因此,您有时会看到对象指针被视为char*,有时这将通过强制转换来完成。@MoonOnAStick:它的行为确实类似于强制转换的类型-如有必要,被强制转换的值将转换为不同的表示形式。不过,它不会更改该值。同样,整数值5和字符值“5”不相同,简单强制转换不会将两者转换为另一个。需要强制转换的另一种情况是确保将指针传递到期望看到空指针的变量参数函数中。由于NULL可以定义为裸0,因此它将作为int传递,而不使用强制转换。
The value is: 5
#include <stdio.h>

int main(void) {
  int nr = 5;
  char castChar = (char)nr;
  char realChar = '5';
  printf("The value is: %d\n", realChar);
}