加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C:奇怪的数学结果

发布时间:2020-12-16 10:40:56 所属栏目:百科 来源:网络整理
导读:以下计算结果为“1”. unsigned long iEndFrame = ((4294966336 + 1920 - 1) / 1920) + 1; 有谁知道为什么?我以为unsigned long可以解决这个问题. 非常感谢你的帮助. 解决方法 计算右侧的值的类型为unsigned int或int. 4294966336 + 1920 = 4294968256 假设
以下计算结果为“1”.

unsigned long iEndFrame = ((4294966336 + 1920 - 1) / 1920) + 1;

有谁知道为什么?我以为unsigned long可以解决这个问题.

非常感谢你的帮助.

解决方法

计算右侧的值的类型为unsigned int或int.

4294966336 + 1920 = 4294968256

假设sizeof(unsigned int)== 4,这会溢出,留下960

(960-1)/1920 = 0

(由于整数运算中的舍入).这让你失望

0 + 1 = 1

如果要使用更大的类型执行计算(并假设sizeof(unsigned long)> sizeof(unsigned int)),则需要在计算中使用强制转换

unsigned long iEndFrame = (((unsigned long)4294966336 + 1920 - 1) / 1920) + 1;

或者,如Slava所述,使用UL后缀将其中一个文字值设置为unsigned long类型

unsigned long iEndFrame = ((4294966336UL + 1920 - 1) / 1920) + 1;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读