首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C语言 64位计算的有关问题

2013-08-29 
关于C语言 64位计算的问题int main(){unsigned int a,bULONGLONG ca 0x80000000b 0x4c a*bretu

关于C语言 64位计算的问题


int main()
{
    unsigned int a,b;
    ULONGLONG c;
    a = 0x80000000;
    b = 0x4;
    c = a*b;
    return 0;
}


为什么这段代码最后让c=0?
很难让我理解,有没有人能帮忙解释下?
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

c = a*b;
修改为
c= ULONGLONG(a)*b;

感谢回复,我知道这样可以,只是不能理解为什么原来的不可以。


因为原来的积是unsigned int,溢出了,变为0,再隐式转换为ULONGLONG 的 0


感谢回复,那为啥下面这个方式,不会让值溢出呢?右边都是BYTE的,8位,如果相乘照理也会溢出的

int main()
{
    unsigned char a,b;
    unsigned int c;
    a = 0x80;
    b = 0x4;
    c = a*b;
    return 0;
}



去读一下arithmetic conversion

热点排行