#include<stdio.h>
void main()
{
int a=65;
char d='A';
if(a==d)
printf("both are same");
}
输出都是相同的。这里 a 是一个整数,因此 65 存储在 32 位中,d 是一个 char 存储在 8 位中,它们如何与计算机相同,所有操作都转换为二进制。
#include<stdio.h>
void main()
{
int a=65;
char d='A';
if(a==d)
printf("both are same");
}
输出都是相同的。这里 a 是一个整数,因此 65 存储在 32 位中,d 是一个 char 存储在 8 位中,它们如何与计算机相同,所有操作都转换为二进制。
由于隐式类型提升规则,计算机能够在二进制级别上将 char 与 int 进行比较。
如果 int 可以表示原始类型的所有值(受宽度限制,对于位域),则该值将转换为 int;否则,它将转换为无符号整数。这些被称为整数促销。
int
这意味着您的 char在处理器比较两者之前被提升为 an 。
C 是一种非常有缺陷的语言,所以这里的字里行间有很多肮脏、不合理的事情:
char
具有实现定义的签名,因此它如何存储数据取决于编译器。char 默认是有符号还是无符号?'A'
是字符文字,碰巧的是,字符文字实际上是int
C 中的类型。这没有任何意义,但事实就是如此。char d='A';
中,文字'A'
(类型int
)被转换为char
. 可能会或可能不会签署。但实际上,签名不应该影响基本字符集 A 到 Z。'A'
将存储为 value 65
,尽管标准不保证这一点。出于这个原因,最好总是写'A'
而不是从不写65
(前者也是最易读的)。a==d
中,字符操作数是一个小整数类型。int
小整数类型在大多数表达式中使用时都会进行隐式提升。此整数提升是一组关于如何平衡表达式的规则的一部分,以确保运算符的两个操作数始终属于同一类型。这些规则称为通常的算术转换。详见:隐式类型提升规则内部存储由编译器决定,通常取决于目标架构。
但是,这与您的代码显示的结果无关;在比较中, char 在比较之前被提升为 int (因为您不能将苹果与橙子进行比较;请阅读语言规则)。因此,它将一个 int 与一个 int 进行比较,它们是相等的。