如何在c中存储整数和字符

时间:2018-06-13 10:54:42

标签: c char int interpretation

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

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

3 个答案:

答案 0 :(得分:3)

由于Implicit type promotion rules,计算机能够将二进制级别的char与int进行比较。

  

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

这意味着在您的处理器比较两者之前,您的字符被提升为int

答案 1 :(得分:2)

C是一种非常有缺陷的语言,所以这里的行之间会发生许多肮脏,不合理的事情:

  • char具有实现定义的签名,因此它如何存储数据取决于编译器。 Is char signed or unsigned by default?
  • 'A'是一个字符文字,实际上,字符文字实际上是C中的int类型。这没有任何意义,但这就是它的原样。
  • 在第char d='A';行中,文字'A'(类型int)会转换为char。可能签署也可能不签署。实际上,签名不应该影响基本字符集A到Z.
  • 最有可能'A'将被存储为值65,尽管标准不保证这一点。出于这个原因,最好总是写'A'而不是65(前者也是最可读的)。
  • 在表达式a==d中,字符操作数是小整数类型。在大多数表达式中使用时,小整数类型会隐式提升为int。此整数提升是表达式平衡的一组规则的一部分,以确保运算符的两个操作数始终是相同的类型。这些规则称为通常的算术转换。有关详细信息,请参阅:Implicit type promotion rules

答案 2 :(得分:1)

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

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