您的位置:首页 > 编程语言 > C语言/C++

C/C++中-1/7 的问题

2015-09-26 14:02 260 查看
真哥的这个问题引起了我的一些疑惑,也找到了一个重大的知识Bug,看书没好好消化的后果。
首先说下答案,C语言中-1/7=0,python中是1,这个不多解释。我要说的是,困扰我的一些关于有符号数,无符号数的问题。
-1的确会成为FFFFFFFF,但是是在无符号数转有符号数的情况才会发生。截断与补全是在数据类型发生改变的情况才会发生。还有浮点数什么的一些很细小的问题,这些都只有在转换的时候才会出现,或者隐式转换中才会出现。记忆力不太好,记得一塌糊涂,分不清谁是谁了都。
下面用代码来记录一下这件神奇的事情:
 #include<iostream>

int main()

{

    unsigned int x = -1;

    int a = x / 7;

    cout << x << endl;

    return 0;

}
x = 4294967295 

a = 613566756
当无符号->有符号数时,-1会直接以FFFFFFFF的形式参与计算。
#include<iostream>
 int main()
 { 
    unsigned int x = -1;
    int m = -1; 
    int a = x / m; 
    cout << a << endl; 
    return 0; 

a = 1

多么有趣的机器。 
补充说明:隐式类型转换--->包含signed与unsigned int,signed会转换为unsigned。如果int恰好为负数,其结果为对unsigned取值个数求模的结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息