注册 登录
编程论坛 C++教室

[求助]关于求模,网上看了些,还是不太理解

hzdz 发布于 2007-07-26 14:04, 1270 次点击
unsigned a,b;

a=-1;
b=256;

这里如果打印a%b,结果是255;如果把前面定义改成有符号整型,打印结果就是-1;

有符号情况下的取余运算好理解,无符号情况下为什么会变成255呢?

-2%256就是254,依次类推

期盼解答,谢谢
11 回复
#2
aipb20072007-07-26 16:06

说错了,如楼下所说,先搞清楚a的值。

负数越界,将该数对类型个数求模的值赋到a。
a =(2^32-1)

[此贴子已经被作者于2007-7-26 18:59:17编辑过]

#3
leeco2007-07-26 18:25
你先搞清楚a的值吧
#4
野比2007-07-26 19:08

unsigned a,b...
也就是unsigned int a,b...
win32环境下是4个字节(32bits)...
-1用十六进制来看就是FFFFFFFF...
最高位是符号位...
但是你定义的是unsigned无符号, 所以最高位还是有效位...
所以其实 a=4294967295...

#5
hzdz2007-07-26 22:06
唉。。你们还是从位的角度给我解释了

这么解释我自己清楚,先谢谢各位

我知道unsigned后 a=-1到了内存里边就存补码


我想问的其实是取模运算这个东西到底是不是就是取余运算?
#6
hzdz2007-07-26 22:09

两位版主回复很详细,这里环境很好,谢谢你们:)

最近把自己当成一个什么都不会的人开始重看c++ primer,所以有时候会问些比较白痴的问题,属于那种一时转到死胡同里想不开的类型,可能明天过来一看自己都会笑。呵呵,还是谢谢

#7
野比2007-07-27 19:15

不客气...
看书两三遍是正常的... 加油..

加班去了...累

#8
hzdz2007-07-27 22:41
..同情人
#9
野比2007-07-28 20:38
以下是引用hzdz在2007-7-26 22:06:01的发言:
唉。。你们还是从位的角度给我解释了

这么解释我自己清楚,先谢谢各位

我知道unsigned后 a=-1到了内存里边就存补码


我想问的其实是取模运算这个东西到底是不是就是取余运算?

取模运算....modulus...
说对了, 就是取余...
A % B = A - int(A/B) B!=0
返回余数...

#10
hzdz2007-07-28 21:03
嗯嗯,明白了,谢谢斑竹:)
#11
fly8132007-07-30 13:09

A%B=A-int(A/B)*B B!=0
漏了一点了

#12
hzdz2007-07-30 14:32
呵呵,楼上心细,意思明白就行
1