C 隐式转换

C++ Implicit conversion

本文关键字:转换      更新时间:2023-10-16
#include <iostream>
int main() {

    char x = 'a';
    char y = 'b';
    char z = x + y;
        printf("%dn",z);
    return 0;
}

为什么此代码的输出-61?

a)每个字符都在计算机中。(计算机只能处理数字,字符是计算机的"仅"图像。)

so:搜索ASCII表。例如http://www.asciatible.com/

-> a = 97,b = 98

a b = 97 98 = 195

b)char定义为带有符号的8位(= 256个数字):它可以包含-128和127之间的数字。因此,195不合适。计算此功能时,将其扔掉,并出现这样的数字。

编辑:

显示内部发生的事情:计算为二进制:

 0110 0001 ('a' = 97)
+0110 0010 ('b' = 98)
 ---------
 1100 0011

因为这是一个签名的数字,所以存储了两个补充。第一个bis设置 ->负。但是(对我来说)最简单的方法是计算:

这个第一个位的值为-128,第二位为64。最小位:2和1。因此:-128 64 2 1 = -61

希望这对此有所帮助……

编辑2:

讨论的结果:这就是您的CPU上发生的情况。这是因为CPU具有一些技术参数。但是您不能假设,这在每个CPU上都会发生!C 在每个CPU上进行编译,但在C/C 中未定义溢出,因此在其他CPU上可以有其他结果。