3 s& _) ]; R( E$ B! h9 k通常取模运算也叫取余运算,它们返回结果都是余数.rem和mod唯一的区别在于:3 i, }( M; Y O6 n
当x和y的正负号一样的时候,两个函数结果是等同的;当x和y的符号不同时,rem函数结果的符号和x的一样,而mod和y一样。2 }, g2 C9 Q- f& `8 Y
这是由于这两个函数的生成机制不同,rem函数采用fix函数,而mod函数采用了floor函数(这两个函数是用来取整的,fix函数向0方向舍入,floor函数向无穷小方向舍入)。# u9 W- n5 k1 ^) ~+ M$ I. A* n
rem(x,y)命令返回的是x-n.*y,如果y不等于0,其中的n = fix(x./y),而mod(x,y)返回的是x-n.*y,当y不等于0时,n=floor(x./y)0 H9 O0 j8 x0 I2 G2 D& s9 p! k4 u, R
/ s1 P. ^' O* C+ g, `+ _, A8 a+ D. X, P3 O. d
两个异号整数取模取值规律 (当是小数时也是这个运算规律,这一点好像与C语言的不太一样)6 Y" `' F9 N! N3 z
6 R5 K) R) o& j0 Z. u, O' g
先将两个整数看作是正数,再作除法运算3 L2 }% y2 p8 C5 I: K/ ?3 @* s
①能整除时,其值为09 V3 q, Y$ ^) n e0 w) I6 S: g
②不能整除时,其值=除数×(整商+1)-被除数) P0 b* T9 c. q- [
6 u) }# C0 o3 G; l例:mod(36,-10)=-40 x8 F0 Z$ |0 G" s: s. a1 v
即:36除以10的整数商为3,加1后为4;其与除数之积为40;再与被数之差为(40-36=4);取除数的符号。所以值为-4。 9 G' j2 h6 w+ n/ F- `4 A; \0 E例:mod(9,1.2)=0.6 0 Z% [+ v* J2 c4 S) T例: " | |' C F: Z9 |! h+ Z>> mod(5,2) 4 A3 S6 E; g& xans =1 %“除数”是正,“余数”就是正 % @% Z' ]4 H9 {0 V>> mod(-5,2)- t" C7 c! f8 {7 z+ w
ans =1 W1 a; [: L( x( H, L; o>> mod(5,-2) ) P# ~+ d+ n" C, P% Gans =-1 %“除数”是负,“余数‘就是负* l% R. r% q( F
>> mod(-5,-2) 2 q7 u* _1 S6 V6 Pans =-1 %用rem时,不管“除数”是正是负,“余数”的符号与“被除数”的符号相同 ; p _, G9 Y& o+ D>> rem(5,2), Q; F* d' p) V' |6 S
ans =1 %“被除数”是正,“余数”就是正 5 l, j4 E) B$ m0 V+ u$ X>> rem(5,-2)* v3 j' ~2 N: m' T' s9 Q
ans =14 u9 ^8 Y2 `/ X
>> rem(-5,2)4 Q! y9 {- }# H( p1 r+ m
ans =-1 %“被除数”是负,“余数”就是负 4 W9 W8 O! T. C9 ^: x. L( h4 M>> rem(-5,-2) : v4 K- A, I- C; E( Kans =-1% M2 z$ X. k0 C$ g/ @# C% R+ ~
9 m8 |) V2 Z: h a. `+ ] i) p
5 f" r* |5 f( u3 _2 |- a
慢慢体会,两者确实不一样6 h c* {- e9 l# N" H