C/C 中两个字符的总和

新手上路,请多包涵

在 C/C++ 中,当我想找到两个字符的总和时 - 我得到 int 的结果。

例如:

 #include <stdio.h>
int main(){
   char a = 'a', b = 'b';
   printf("%d + %d = %d\n", sizeof(a), sizeof(b), sizeof(a + b));
   return 0;
}

印刷

1 + 1 = 4

为什么?

原文由 Mahnerak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 384
2 个回答

Because although a and b are each of type char , the expression a + b is of type int .每当您使用 char 类型进行数学运算时,它们都会在进行实际计算之前转换为 int。

原文由 Lee Daniel Crocker 发布,翻译遵循 CC BY-SA 3.0 许可协议

这种提升的原因是历史性的:当 C 语言在 40 多年前被发明时,处理器在单一整数类型上进行数学运算;您可以存储较小的类型,但没有字节级算术。所以提升规则反映了当时的现实:小于处理器整数类型的类型将被硬件提升为该整数类型。当然,您可以在软件中进行数学运算(这就是 long 经常实现的方式),但这会慢得多(因为 long 通常是这样)。

原文由 Pete Becker 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏