首页 > 解决方案 > 当我们从较低的数据类型类型转换到较高的数据类型时会发生什么

问题描述

内存空间的可访问性会改变还是只是通知编译器采用上述类型的变量?

例子:

int main()
{
    char a;
    a = 123456789;
    printf("ans is %d\n",(int)a);
}

输出:

overflow in implicit constant conversion a= 123456789.
ans is 21.

在这里我知道它为什么会导致溢出。但我想知道发生溢出时如何访问内存。

标签: ccasting

解决方案


这有点简单:由于char通常只保存一个字节,因此只有一个字节123456789会被复制到a. 究竟如何取决于 if charis signedor unsigned(它是特定于实现的)。有关确切的详细信息,请参见例如此整数转换参考

通常发生的情况(我没有看到任何编译器有任何不同)是值的最后一个字节被复制,未经修改,进入a.

对于123456789,如果您查看值的十六进制表示,它将是0x75bcd15。在这里你可以很容易地看到最后一个字节是0x15十进制21的。

int当您打印该值时printf,强制转换会int发生什么实际上不会发生int...... 你的printf电话完全等于

printf("ans is %d\n",a);

推荐阅读