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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |