请问“取模“是什么意思?

sayto 2001-10-29 10:49:14
234*456 = 106704 = 2*65536-24368为什么取模后得是-24368
...全文
3492 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sayto 2001-10-29
  • 打赏
  • 举报
回复
这是教科书,怎么会错,而且偶们老湿也是这么讲的,书上说:“
有时候,我们会面临下面计算结果不准确的问题:
long m = 234*456/6;
即发现m为-4061,而不是17745.原因是语句进行int型数的乘法运算,结果仍以int型数保留起来:235x456 = 106704 = 2x65535-24368,取模之后得到-243687。该数参加整除运算:-24368/6得-4061(取整)。由于中间的结果被截断,所以,最后的结果是错的。“

这是书上的原话,但是我试过,结果也不是-4061,是17784啊?
lxp981818 2001-10-29
  • 打赏
  • 举报
回复
一定是你抄错或书错!
sayto 2001-10-29
  • 打赏
  • 举报
回复
那为什么书上说:234*456 = 106704 = 2*65536-24368为什么取模后得是-24368
a813 2001-10-29
  • 打赏
  • 举报
回复
取模就是取余数,如10%3=1,9%3=0
max为最大数,max(5,6)结果为6
sayto 2001-10-29
  • 打赏
  • 举报
回复
还想一个max(5,6),max是什么函数
code_tin 2001-10-29
  • 打赏
  • 举报
回复
时代不同啦
ineedyou 2001-10-29
  • 打赏
  • 举报
回复
这个问题是由于字长不同造成的,另外还有符号位的转换问题,在做了234*456后,低16位保留,其余的高位被截掉了,第16 位的值为1,由于定义的不是unsigned 所以编译器将之视为符号位,这样的到了一个负数,在进行=/16时,编译器先将刚才得到负数转换long型,就将16位的1移到了第32位(现在的int 和long的长度一样),还是为符号位,于是结果就为:-(24368/6)
蒋晟 2001-10-29
  • 打赏
  • 举报
回复
书太旧了
a813 2001-10-29
  • 打赏
  • 举报
回复
short s=234*456;
long m = s/6;
这样是书上的结果。
windows int 为32bit,书上的int 为16 bit.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧