-1
#include<stdio.h>
void main()
{
  int a=65;
  char d='A';
   if(a==d)
    printf("both are same");
 }

输出都是相同的。这里 a 是一个整数,因此 65 存储在 32 位中,d 是一个 char 存储在 8 位中,它们如何与计算机相同,所有操作都转换为二进制。

4

3 回答 3

3

由于隐式类型提升规则,计算机能够在二进制级别上将 char 与 int 进行比较。

如果 int 可以表示原始类型的所有值(受宽度限制,对于位域),则该值将转换为 int;否则,它将转换为无符号整数。这些被称为整数促销。

int这意味着您的 char在处理器比较两者之前被提升为 an 。

于 2018-06-13T11:01:47.653 回答
2

C 是一种非常有缺陷的语言,所以这里的字里行间有很多肮脏、不合理的事情:

  • char具有实现定义的签名,因此它如何存储数据取决于编译器。char 默认是有符号还是无符号?
  • 'A'是字符文字,碰巧的是,字符文字实际上是intC 中的类型。这没有任何意义,但事实就是如此。
  • 在该行char d='A';中,文字'A'(类型int)被转换为char. 可能会或可能不会签署。但实际上,签名不应该影响基本字符集 A 到 Z。
  • 很可能'A'将存储为 value 65,尽管标准不保证这一点。出于这个原因,最好总是写'A'而不是从不写65(前者也是最易读的)。
  • 在表达式a==d中,字符操作数是一个小整数类型int小整数类型在大多数表达式中使用时都会进行隐式提升。此整数提升是一组关于如何平衡表达式的规则的一部分,以确保运算符的两个操作数始终属于同一类型。这些规则称为通常的算术转换。详见:隐式类型提升规则
于 2018-06-13T11:40:35.260 回答
1

内部存储由编译器决定,通常取决于目标架构。

但是,这与您的代码显示的结果无关;在比较中, char 在比较之前被提升为 int (因为您不能将苹果与橙子进行比较;请阅读语言规则)。因此,它将一个 int 与一个 int 进行比较,它们是相等的。

于 2018-06-13T10:57:26.320 回答