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

本文探讨了C语言中-1除以7为何等于0,以及在不同数据类型转换下,如无符号数转有符号数时,数值如何变化。通过代码示例展示了无符号整数参与运算的特殊情况,并解释了隐式类型转换时,负数作为有符号整数转换成无符号时的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

真哥的这个问题引起了我的一些疑惑,也找到了一个重大的知识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取值个数求模的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值