模运算符%的定义? 数学中求模如何定义?

\u6a21\u8fd0\u7b97\u7b26% \u7528\u6cd5

\u6309\u9664\u6cd5\u89c4\u5219 123 \u9664\u4ee5 1000 \u80af\u5b9a\u8981\u5148\u4e0a0
(\u56e0\u4e3a123 \u96641000 \u7b49\u4e8e0.123,\u5f53\u7136\u662f\u5148\u4e0a0 \u518d\u5206\u522b\u4e0a 1,2,3)

\u4f46\u662f\u7531\u4e8e% \u662f\u9488\u5bf9\u6574\u6570\u8fdb\u884c\u64cd\u4f5c\u7684
\u6240\u4ee50\u4e58\u4ee51000 \u5f970
123\u51cf\u53bb0 \u7b49\u4e8e123 \u6240\u4ee5 \u4f59\u6570\u5e94\u8be5\u662f123

\u6240\u6709\u5c0f\u4e8e\u7684\u90fd\u5e94\u8be5\u662f\u6309\u8fd9\u4e2a\u6cd5\u5219\u8fdb\u884c\u8ba1\u7b97\u7684,\u5373 :
\u5c0f\u7684\u6570%\u5927\u7684\u6570=\u5c0f\u7684\u6570
123%1000=123

\u6570\u5b66\u4e2d \u6a21 \u8fd9\u4e2a\u5b57\u88ab\u7528\u4e8e\u5f88\u591a\u4e2a\u4e0d\u540c\u9886\u57df\uff08\u4f46\u662f\u610f\u4e49\u4e0d\u540c\uff09


\u4e00\u3001C\u8bed\u8a00\u4e2d\u7684\u8ba1\u7b97\u7b26\u53f7%\uff0c\u8fd9\u4e2a\u6c42\u6a21\u5728\u6570\u5b66\u4e2d\u662f\u6307\u5c5e\u4e8e\u6570\u8bba\u5185\u5bb9\u7684\u6c42\u6a21\uff08\u901a\u4fd7\u7684\u8bf4\u5c31\u662f\u6574\u6570\u9664\u6cd5\u6c42\u4f59\u6570\uff09\uff0c\u8fd9\u79cd\u6c42\u6a21\u5728\u6570\u5b66\u7684\u62bd\u8c61\u4ee3\u6570\u4e2d\u6709\u66f4\u4e00\u822c\u60c5\u51b5\u7684\u63a8\u5e7f\uff0c\u7b26\u53f7\u662f a \u4e09 b (mod m) \uff08\u201c\u4e09\u201d\u662f\u4e09\u8df3\u6a2a\u7ebf\u7684\u7b49\u53f7\uff0c\u56e0\u4e3a\u6253\u4e0d\u51fa\u6765\u6211\u7528 \u4e09\u4ee3\u66ff\u4e86 \u4f60\u81ea\u884c\u8111\u8865\uff09\u3002

\u8fd9\u4e2a\u7b26\u53f7\u7684\u7b49\u4ef7\u610f\u4e49\u662f a-b\u5c5e\u4e8e \u201c m\u201d\u5bf9\u5e94\u7684\u7406\u60f3\uff0c\u6216\u8005\u901a\u4fd7\u7684\u8bf4\u662fa,b\u540c\u5c5e\u4e8e\u6a21\u6389m\u7684\u4e00\u4e2a\u7b49\u4ef7\u7c7b \u3002\u8fd9\u662f\u6bd4\u8f83\u4e00\u822c\u7684\u60c5\u51b5\uff0c\u5728\u521d\u7b49\u6570\u8bba\u4e2d\u6709\u4e00\u79cd\u7279\u4f8b\uff0c\u5c31\u662f\u5f53\u8ba8\u8bba\u7684\u8303\u56f4\u9650\u4e8e\u6574\u6570\u53ca\u5176\u8fd0\u7b97\u4e0b\uff0ca,b,m\u90fd\u662f\u6574\u6570,m\u7684\u5bf9\u5e94\u7684\u7b49\u4ef7\u7c7b\u53d6\u4e3am\u7684\u5269\u4f59\u7c7b\u610f\u4e49\u3002\u8fd9\u79cd\u7279\u6b8a\u7684\u4f8b\u5b50\u4e2d\uff0ca,b\u540c\u5c5e\u4e8em\u7684\u4e00\u4e2a\u5269\u4f59\u7c7b\uff0c\u4e5f\u5c31\u662fa-b\u80fd\u88abm\u6574\u9664\uff0c\u4e5f\u5c31\u662f\u901a\u4fd7\u7684\u8bf4a,b\u5e26\u4f59\u6570\u9664\u6cd5\u9664\u4ee5m\u5f97\u5230\u7684\u4f59\u6570\u76f8\u540c\uff0c\u5373\u540c\u4f59\u3002

\u636e\u6b64\uff0cC\u8bed\u8a00\u4e2d\u7684%\u5c31\u76f8\u5f53\u4e8e mod a%m = b \u5c31\u76f8\u5f53\u4e8e \u6c42\u4e00\u4e2ab\uff0c\u4f7f\u5f97b\u4e09a(mod m) \uff08b\u53d6\u76f8\u5e94\u5269\u4f59\u7c7b\u4e2d\u6700\u5c0f\u7684\u975e\u8d1f\u6574\u6570\u4f5c\u4e3a\u4ee3\u8868\uff09\u3002

\u4e8c\u3001\u5728\u6570\u5b66\u4e2d\u8fd8\u6709\u4e00\u4e2a\u5730\u65b9\u4e5f\u7528\u4e86\u201c\u6a21\u201d\u8fd9\u4e2a\u540d\u8bcd\uff0c\u4f46\u4e0e\u4e0a\u8ff0\u7684\u6ca1\u4ec0\u4e48\u5173\u7cfb\u3002\u5c31\u662f\u5411\u91cf/\u77e2\u91cf/\u590d\u6570\u7684 \u6a21\u3002\u5b83\u662f\u7edd\u5bf9\u503c\u3001\u957f\u5ea6\u7684\u63a8\u5e7f\u3002\u5b83\u7684\u8fdb\u4e00\u6b65\u63a8\u5e7f\u662f\u8303\u6570\u3002\u4f8b\u5982\uff0c\u590d\u6570z=x+iy \uff08x\uff0cy\u662f\u5b9e\u6570\uff0ci\u662f\u865a\u6570\u5355\u4f4d i^2 = -1\uff09\u7684\u6a21\u5c31\u662f \u6839\u53f7\u4e0b\uff08x\u7684\u5e73\u65b9+y\u7684\u5e73\u65b9\uff09\u3002\u5f88\u5bb9\u6613\u9a8c\u8bc1\u5b83\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u8303\u6570\u3002

\u4e09\u3001\u5728\u6570\u5b66\u4e2d\u8fd8\u6709\u4e00\u7c7b\u4ee3\u6570\u7ed3\u6784\u4e5f\u88ab\u53eb\u505a\u201c\u6a21\u201d\uff0c\u5728\u5404\u79cd\u4ee3\u6570\u7ed3\u6784\u7684\u8868\u793a\u8bba\u4e2d\u5360\u6709\u5f88\u91cd\u8981\u7684\u5730\u4f4d\u3002\u4e5f\u7b97\u662f\u7ebf\u6027\u7a7a\u95f4\u7684\u63a8\u5e7f\uff0c\u7ebf\u6027\u7a7a\u95f4\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u201c\u6a21\u201d\u3002\u4e00\u822c\u8bf4\u5230\u6a21\uff0c\u662f\u6307\u4e00\u4e2a\u4ea4\u6362\u7fa4\uff08\u4e5f\u53ebAbel\u7fa4\u3001\u52a0\u6cd5\u7fa4\uff09M\uff0cM\u8981\u6210\u4e3a\u4e00\u4e2a\u6709\u5355\u4f4d\u5143\u7684\u73afR\u4e0a\u7684\u6a21\uff0c\u9700\u8981\u5b9a\u4e49\u4e00\u4e2a\u8fd0\u7b97\uff08\u662f\u6570\u4e58\u8fd0\u7b97\u7684\u63a8\u5e7f\uff09RXM\u2192M\uff0c\u8fd9\u4e2a\u8fd0\u7b97\u8981\u6ee1\u8db3\u4e00\u5b9a\u7684\u6761\u4ef6\uff0c\u4f8b\u5982\u4e0e\u52a0\u6cd5\u7684\u5404\u79cd\u5206\u914d\u7387\uff0c\u5355\u4f4d\u5143e\u6ee1\u8db3e.m=m\u4e4b\u7c7b\u7684\u3002\u5728\u674e\u4ee3\u6570\u7684\u8868\u793a\u7406\u8bba\u4e2d\uff0c\u8fd8\u6709\u79cd\u674e\u4ee3\u6570\u7684\u6a21\u7ed3\u6784\uff0c\u4e00\u4e2a\u4ea4\u6362\u7fa4M\uff0c\u8981\u6210\u4e3a\u4e00\u4e2a\u674e\u4ee3\u6570L\u4e0a\u7684\u6a21\uff08\u5176\u672c\u8d28\u5176\u5b9e\u662f\u674e\u4ee3\u6570L\u7684\u4e00\u4e2a\u8868\u793a\uff09\uff0c\u5b9a\u4e49RXM\u2192M\u65f6\u8981\u6ee1\u8db3\u5bf9\u4e8e\u674e\u4e58[,]\u6ee1\u8db3[x,y].m = xym-yxm\u7b49\u6761\u4ef6\uff0c\u674e\u4ee3\u6570\u7684L\u6a21\u8ddf \u73afR\u4e0a\u7684R\u6a21\u7ed3\u6784\u4e0a\u6709\u4e00\u5b9a\u7684\u76f8\u4f3c\u6027\u3002\u90fd\u53eb\u505a\u201c\u6a21\u201d\u3002

P.S. \u597d\u50cf\u5176\u5b9e \u4e09\u7684\u6a21\u82f1\u6587\u539f\u8bcd\u8ddf\u4e00\u3001\u4e8c\u7684\u6a21\u82f1\u6587\u539f\u8bcd\u5176\u5b9e\u5dee\u4e86\u4e00\u4e24\u4e2a\u5b57\u6bcd\u597d\u50cf\uff0c\u53ef\u80fd\u662f\u7ffb\u8bd1\u6ca1\u529e\u6cd5\u4e86\u3002\u81ea\u884c\u6ce8\u610f\u522b\u6df7\u6dc6\u4e86\u5427\u3002

\u8fd8\u662f\u6709\u4e00\u70b9\u70b9\u5dee\u522b\u7684\uff0c\u56e0\u4e3aC\u8bed\u8a00\u7684%\u6c42\u6a21\u6c42\u7684\u53ea\u662f\u4e00\u4e2a\u4ee3\u8868\u6574\u6570\uff08\u5c31\u662f0~m-1\u8303\u56f4\u5185\u7684\uff09\uff0c\u800c\u4e8b\u5b9e\u4e0a\u4e25\u683c\u6765\u8bf4\uff0c\u6a21\u5e94\u8be5\u4e5f\u8981\u5305\u62ec\u6574\u4e2a\u5269\u4f59\u7c7b\u3002

2.6 运算符
C语言的内部运算符很丰富,运算符是告诉编译程序执行特定算术或逻辑操作的符号。C语言有三大运算符:算术、关系与逻辑、位操作。另外, C还有一些特殊的运算符,用于完成一些特殊的任务。

2.6.1 算术运算符
表2 - 5列出了C语言中允许的算术运算符。在C语言中,运算符“ +”、“-”、“*”和“ /”的用法与大多数计算机语言的相同,几乎可用于所有C语言内定义的数据类型。当“ /”被用于整数或字符时,结果取整。例如,在整数除法中, 1 0 / 3 = 3。
一元减法的实际效果等于用- 1乘单个操作数,即任何数值前放置减号将改变其符号。模运算符“%”在C语言中也同它在其它语言中的用法相同。切记,模运算取整数除法的余数,所以“%”不能用于float和double类型。

表2-5 算术运算符
运算符 作用 运算符 作用
- 减法,也是一元减法 % 模运算
+ 加法 -- 自减(减1)
* 乘法 ++ 自增(增1)
/ 除法

下面是说明%用法的程序段。
int x,y;
x = 10;
y = 3;
printf("%d",x/y); /* 显示3 */
printf("%d",x%y) ; /* 显示1 ,整数除法的余数* /
x = 1 ;
y = 2 ;
printf("%d,%d",x/y,x%y) ; /* 显示0,1 */
最后一行打印一个0和一个1,因为1 / 2整除时为0,余数为1,故1 % 2取余数1。

2.6.2 自增和自减
C语言中有两个很有用的运算符,通常在其它计算机语言中是找不到它们的—自增和自减运算符, + +和- -。运算符“ + +”是操作数加1,而“- -”是操作数减1,换句话说:x = x + 1 ; 同+ + x ; x = x - 1 ; 同- - x ;
自增和自减运算符可用在操作数之前,也可放在其后,例如: x = x + 1;可写成+ + x;或x + +;但在表达式中这两种用法是有区别的。自增或自减运算符在操作数之前, C语言在引用操作数之前就先执行加1或减1操作;运算符在操作数之后, C语言就先引用操作数的值,而后再进行加1或减1操作。请看下例:
x = 1 0;
y = ++x;
此时,y = 11。如果程序改为:
x = 10 ;
y = x++ ;
则y = 10。在这两种情况下, x都被置为11,但区别在于设置的时刻,这种对自增和自减发生时刻的控制是非常有用的。
在大多数C编译程序中,为自增和自减操作生成的程序代码比等价的赋值语句生成的代码要快得多,所以尽可能采用加1或减1运算符是一种好的选择。
下面是算术运算符的优先级:
最高 ++、--
-(一元减)
*、/、%
最低 +、-
编译程序对同级运算符按从左到右的顺序进行计算。当然,括号可改变计算顺序。C语言处理括号的方法与几乎所有的计算机语言相同:强迫某个运算或某组运算的优先级升高。

2.6.3 关系和逻辑运算符
关系运算符中的“关系”二字指的是一个值与另一个值之间的关系,逻辑运算符中的“逻辑”二字指的是连接关系的方式。因为关系和逻辑运算符常在一起使用,所以将它们放在一起讨论。
关系和逻辑运算符概念中的关键是True(真)和Flase(假)。C语言中,非0为True,0为Flase。使用关系或逻辑运算符的表达式对Flase和Ture分别返回值0或1 (见表2 - 6 )。

表2-6 关系和逻辑运算符
关系运算符 含义 关系运算符 含义
> 大于 <= 小于或等于
>= 大于等于 == 等于
< 小于 != 不等于

逻辑运算符 含义
&& 与
|| 或
! 非

表2 - 6给出于关系和逻辑运算符,下面用1和0给出逻辑真值表。
关系和逻辑运算符的优先级比算术运算符低,即像表达式10>1+12的计算可以假定是对表
达式10>( 1 + 12)的计算,当然,该表达式的结果为Flase。
在一个表达式中允许运算的组合。例如:
10>5&&!(10<9)||3<=4
p q p&&q p||q !p
0 0 0 0 1
0 1 0 1 1
1 0 0 1 0
1 1 1 1 0

这一表达式的结果为True。
下表给出了关系和逻辑运算符的相对优先级:
最高 !
>= <=
== !=
&&
最低 ||
同算术表达式一样,在关系或逻辑表达式中也使用括号来修改原计算顺序。
切记,所有关系和逻辑表达式产生的结果不是0就是1,所以下面的程序段不仅正确而且将在屏幕上打印数值1。
int x;
x = 100;
printf("%d",x>10);

2.6.4 位操作符
与其它语言不同,C语言支持全部的位操作符( Bitwise Operators)。因为C语言的设计目的是取代汇编语言,所以它必须支持汇编语言所具有的运算能力。位操作是对字节或字中的位(bit)进行测试、置位或移位处理,这里字节或字是针对C标准中的char和int数据类型而言的。位操作不能用于float、double、long double、void或其它复杂类型。表

2 - 7给出了位操作
的操作符。位操作中的AND、OR和NOT(1的补码)的真值表与逻辑运算等价,唯一不同的是位操作是逐位进行运算的。

表2-7 位操作符
操作符 含义 操作符 含义
& 与(AND) ~ 1的补(NOT)
| 或(OR) >> 右移
^ 异或(XOR) << 左移

下面是异或的真值表。
表2-8 异或的真值表
p q p^q
0 0 0
1 0 1
1 1 0
0 1 1

如表2 - 8所示,当且仅当一个操作数为True时,异或的输出为True,否则为Flase。
位操作通常用于设备驱动程序,例如调制解调器程序、磁盘文件管理程序和打印机驱动程序。这是因为位操作可屏蔽掉某些位,如奇偶校验位(奇偶校验位用于确保字节中的其它位不会发生错误通常奇偶校验位是字节的最高位)。
通常我们可把位操作A N D作为关闭位的手段,这就是说两个操作数中任一为0的位,其结果中对应位置为0。例如,下面的函数通过调用函数read_modem( ),从调制解调器端口读入一个字符,并将奇偶校验位置成0。

[例2 - 4 ]
Char get_char_from_modem()
{
char ch;
ch=read_modem(); /*从调制解调器端口中得到一个字符* /
return(ch&127);
}
字节的位8是奇偶位,将该字节与一个位1到位7为1、位8为0的字节进行与操作,可将该字节的奇偶校验位置成0。表达式ch&127正是将ch中每一位同127数字的对应位进行与操作,结果ch的位8被置成了0。在下面的例子中,假定c h接收到字符"A"并且奇偶位已经被置位。
奇偶位

110000001 内容为‘A’的c h,其中奇偶校验位为1
011111111 二进制的127执行与操作
& 与操作
-----------
=010000001 去掉奇偶校验的‘A’

位操作OR与AND操作相反,可用来置位。任一操作数中为1的位将结果的对应位置1。如下所示,128|3的情况是:
1000000 128的二进制
0000011 3的二进制
| 或操作
----------
=1000011 结果

异或操作通常缩写为XOR,当且仅当做比较的两位不同时,才将结果的对应位置位。如下所示,异或操作127 ^ 12 0的情况是:
01111111 127 的二进制
01111000 120 的二进制
^ 异或操作
---------
=00000111 结果
一般来说,位的AND、OR和XOR操作通过对操作数运算,直接对结果变量的每一位分别处理。正是因为这一原因(还有其它一些原因),位操作通常不像关系和逻辑运算符那样用在条件语句中,我们可以用例子说明这一点:假定X = 7,那么x && 8为Ture( 1 ) ,而x & 8却为Flase( 0 )。
记住,关系和逻辑操作符结果不是0就是1。而相似的位操作通过相应处理,结果可为任意值。换言之,位操作可以有0或1以外的其它值,而逻辑运算符的计算结果总是0或1。
移位操作符>>和<<将变量的各位按要求向或向左移动。右移语句通常形式是:
variable >>右移位数
左移语句是:
variable << 左移位数
当某位从一端移出时,另一端移入0(某些计算机是送1,详细内容请查阅相应C编译程序用户手册)。切记:移位不同于循环,从一端移出的位并不送回到另一端去,移去的位永远丢失了,同时在另一端补0。
移位操作可对外部设备(如D/A转换器)的输入和状态信息进行译码,移位操作还可用于整数的快速乘除运算。如表2 - 9所示(假定移位时补0),左移一位等效于乘2,而右移一位等效于除以2。

表2-9 用移位操作进行乘和除
字符x 每个语句执行后的x x的值
x=7 00000111 7
x<<1 00001110 14
x<<3 01110000 112
x<<2 11000000 192
x>>1 01100000 96
x>>2 00011000 24

每左移一位乘2,注意x < < 2后,原x的信息已经丢失了,因为一位已经从一端出,每右移一位相当于被2除,注意,乘后再除时,除操作并不带回乘法时已经丢掉的高位。
反码操作符为~。~的作用是将特定变量的各位状态取反,即将所有的1位置成0,所有的0位置成1。
位操作符经常用在加密程序中,例如,若想生成一个不可读磁盘文件时,可以在文件上做一些位操作。最简单的方法是用下述方法,通过1的反码运算,将每个字节的每一位取反。
原字节 00101100
第一次取反码 11010011
第二次取反码 00101100
注意,对同一行进行连续的两次求反,总是得到原来的数字,所以第一次求反表示了字节的编码,第二次求反进行译码又得到了原来的值。
可以用下面的函数encode( )对字符进行编码。

[例2 - 5 ]
char encode(ch)
char ch;
{
return (~ch);
}

2.6.5 ?操作符
C语言提供了一个可以代替某些if - then - else语句的简便易用的操作符?。该操作符是三元的,其一般形式为:
EXP1? EXE2: EXP3
EXP1,EXP2和EXP3是表达式,注意冒号的用法和位置。
操作符“?”作用是这样的,在计算EXP1之后,如果数值为True,则计算EXP2,并将结果作为整个表达式的数值;如果E XP1的值为Flase,则计算EXP3,并以它的结果作为整个表达式的值,请看下例:
x = 10;
y = x> 9? 100: 200;
例中,赋给y的数值是100,如果x被赋给比9小的值,y的值将为200,若用if - else语句改写,有下面的等价程序:
x = 10;
if(x>9) y=100;
else y=200;
有关C语言中的其它条件语句将在第3章进行讨论。

2.6.6 逗号操作符
作为一个操作符,逗号把几个表达式串在一起。逗号操作符的左侧总是作为void(无值),这意味着其右边表达式的值变为以逗号分开的整个表达式的值。例如:
x = ( y = 3 , y + 1 ) ;
这行将3赋给y,然后将4赋给x,因为逗号操作符的优先级比赋值操作符优先级低,所以必须使用括号。
实际上,逗号表示操作顺序。当它在赋值语句右边使用时,所赋的值是逗号分隔开的表中最后那个表达式的值。例如,
y = 10;
x = (y = y - 5 , 2 5 / y ) ;
执行后,x的值是5,因为y的起始值是1 0,减去5之后结果再除以2 5,得到最终结果。
在某种意义上可以认为,逗号操作符和标准英语的and是同义词。

2.6.7 关于优先级的小结
表2 - 1 0列出了C语言所有操作符的优先级,其中包括将在本书后面讨论的某些操作符。注意,所有操作符(除一元操作符和?之外)都是左结合的。一元操作符( *,&和-)及操作符“?”则为右结合。
表2-10 C语言操作符的优先级
最高级 ()[] →
!~ ++ -- -(type) * & sizeof
* / %
+ -
<< >>
<= >=
== !=
& ^ |
&&
||
?
= += -= *= /=
最低级,
2.7 表达式
表达式由运算符、常量及变量构成。C语言的表达式基本遵循一般代数规则,有几点却是与C语言紧密相关的,以下将分别加以讨论。

2.7.1 表达式中的类型转换
混合于同一表达式中的不同类型常量及变量,应均变换为同一类型的量。C语言的编译程序将所有操作数变换为与最大类型操作数同类型。变换以一次一操作的方式进行。具体规则如下:

1 ) 所有char及short int 型量转为int型,所有float转换为double。
2) 如操作数对中一个为long double ,另一个转换为long double。① 要不然,一个为double,另一个转为doub le。② 要不然,一个为long,另一个转为long。③ 要不然,一个为unsigned,另一个转为unsigned。
一旦运用以上规则。每一对操作数均变为同类型。注意,规则2 )有几种必须依次应用的条件。
图2 - 1示出了类型转换。首先, char ch转换成int,且floatf 转换成double;然后ch /i的结果转换成doubl e,因为f * d是double;最后由于这次两个操作数都是double,所以结果也是double。.

2.7.2 构成符cast
可以通过称为cast的构成符强迫一表达式变为特定类型。其一般形式为:
(type)expression
( type)是标准C语言中的一个数据类型。例如,为确保表达式x / 2的结果具有类型float,可写为:
(float)x / 2
通常认为cast是操作符。作为操作符, cast是一元的,并且同其它一元操作符优先级相同。
虽然cast在程序中用得不多,但有时它的使用的确很有价值。例如,假设希望用一整数控制循环,但在执行计算时又要有小数部分。

[例2 - 6 ]
main()
{
int i;
for(i+1;i<=100;++i)
printf("%d/2 is :%f",i,(float)i/2);
}
若没有cast( float),就仅执行一次整数除;有了cast就可保证在屏幕上显示答案的小数部分。

2.7.3 空格与括号
为了增加可读性,可以随意在表达式中插入tab和空格符。例如,下面两个表达式是相同的。
x = 10 / y *( 127 / x );
x = 10 / y *( 127 / x );
冗余的括号并不导致错误或减慢表达式的执行速度。我们鼓励使用括号,它可使执行顺序更清楚一些。例如,下面两个表达式中哪个更易读一些呢?
x = y / 2 - 34 * temp & 127;
x = ( y / 2 ) - ( ( 34 * temp) & 127);

2.7.4 C语言中的简写形式
C语言提供了某些赋值语句的简写形式。例如语句:
x = x + 10;
在C语言中简写形式是:
x + = 10;
这组操作符对+ =通知编译程序将X + 1 0的值赋予X。这一简写形式适于C语言的所有二元操作符(需两个操作数的操作符)。在C语言中,variable=variable1 operator expression;与variable1 operator=expression相同。

请看另一个例子:
x = x - 1 0 0 ;
其等价语句是
x - = 100;
简写形式广泛应用于专业C语言程序中,希望读者能熟悉它。
参考资料:http://www.code365.com/programe/c/jcjc/200512152154037317.htm

%是用于取得整除结果的余数的
比如9除以4,那么在整数除法运算下,商为2,余数为1,即9%4=1
不考虑浮点运算,浮点运算时9/4=2.5
%的前提条件是整数运算,即它的两个操作数:被除数和除数的数据类型均为整数类型

若 a=bq+r 0≤r<|b|
则 a (mod b)=r
mod 即 模(%)

就是求余数的意思

  • C璇█涓殑鈥%鈥濅唬琛ㄤ粈涔堟剰鎬?
    绛旓細C璇█涓紝绠楁湳杩愮畻绗︹%鈥濅唬琛ㄦā锛堝彇浣欙級杩愮畻锛屸++鈥濅唬琛ㄥ彉閲忚嚜澧炶繍绠楋紝鈥--鈥濅唬琛ㄥ彉閲忚嚜鍑忚繍绠椼1銆佹ā杩愮畻鈥%鈥濃滄ā鈥濇槸鈥淢od鈥濈殑闊宠瘧锛屾ā杩愮畻澶氬簲鐢ㄤ簬绋嬪簭缂栧啓涓 Mod鐨勫惈涔変负姹備綑銆傛ā杩愮畻鍦ㄦ暟璁哄拰绋嬪簭璁捐涓兘鏈夌潃骞挎硾鐨勫簲鐢紝浠庡鍋舵暟鐨勫垽鍒埌绱犳暟鐨勫垽鍒紝浠庢ā骞傝繍绠楀埌鏈澶у叕绾︽暟鐨勬眰娉曪紝...
  • vb涓 %鏄粈涔堟剰鎬?
    绛旓細鍦╒B璇█涓紝鐧惧垎鍙%鐢ㄤ簬琛ㄧず鍙栨ā杩愮畻绗︺鍗充袱涓暣鏁扮浉闄わ紝鍙栦綑鏁伴儴鍒銆備緥濡傦紝7 Mod 3鐨勭粨鏋滀负1銆傚湪VB涓紝鍙栨ā杩愮畻绗﹀拰闄ゆ硶杩愮畻绗(/)涓璧蜂娇鐢ㄦ椂锛屽彲鐢ㄤ簬鍒ゆ柇涓涓暟鏄惁涓哄伓鏁般備緥濡傦紝濡傛灉n Mod 2 = 0锛屽垯n鏄伓鏁般傞櫎浜嗗彇妯¤繍绠椾箣澶栵紝VB涓殑鐧惧垎鍙疯繕鏈夊叾浠栫敤閫斻傚湪瀛楃涓插鐞嗕腑锛岀櫨鍒嗗彿鍙敤浜庢牸...
  • %杩愮畻绗鏄粈涔?
    绛旓細C璇█涓紝% 鏄眰浣欒繍绠楃(妯¤繍绠楃)锛岀壒鐐规槸锛氭槸鍙岀洰杩愮畻绗︼紝鍏锋湁宸︾粨鍚堟銆傝姹傚弬涓庤繍绠楃殑閲忓潎涓烘暣鍨嬶紝涓嶈兘搴旂敤浜巉loat鎴杁ouble绫诲瀷銆傛眰浣欒繍绠楃殑缁撴灉绛変簬涓ゆ暟鐩搁櫎鍚庣殑浣欐暟锛屾暣闄ゆ椂缁撴灉涓0銆傚锛5%3=2 4%3=1 3%3=0 2%3=2 1%3=1 0%3=0 鈥++鈥濇槸鑷1杩愮畻绗︼紝鍏跺姛鑳芥槸浣垮彉閲忕殑...
  • 妯¤繍绠楃%鐨勫畾涔?
    绛旓細鍦–璇█涓,杩愮畻绗︹ +鈥濄佲-鈥濄佲*鈥濆拰鈥 /鈥濈殑鐢ㄦ硶涓庡ぇ澶氭暟璁$畻鏈鸿瑷鐨勭浉鍚,鍑犱箮鍙敤浜庢墍鏈塁璇█鍐瀹氫箟鐨勬暟鎹被鍨嬨傚綋鈥 /鈥濊鐢ㄤ簬鏁存暟鎴栧瓧绗︽椂,缁撴灉鍙栨暣銆備緥濡,鍦ㄦ暣鏁伴櫎娉曚腑, 1 0 / 3 = 3銆 涓鍏冨噺娉曠殑瀹為檯鏁堟灉绛変簬鐢- 1涔樺崟涓搷浣滄暟,鍗充换浣曟暟鍊煎墠鏀剧疆鍑忓彿灏嗘敼鍙樺叾绗﹀彿銆妯¤繍绠楃鈥%鈥濆湪C璇█涓...
  • % C璇█涓粈涔堟剰鎬
    绛旓細1.妯¤繍绠楋紝鍗虫眰浣欐暟銆傝〃杈惧紡 a % b 灏辨槸璁$畻 a 闄や互 b 寰楀嚭鐨勪綑鏁銆備緥濡: 4 % 3 鐨勭粨鏋滄槸 1 2.杞箟绗︼紝姣斿鍦╯canf()鍜宲rintf()涓殑杈撳叆鍙傛暟甯稿嚭鐜板甫鏈%鐨勮〃绀哄弬鏁扮被鍨嬬殑鍙橀噺锛屽%d,%f绛夈
  • 妯闄杩愮畻绗︾殑杩愮畻绗﹀彿鏄粈涔?
    绛旓細濡傛灉鎿嶄綔鏁版槸鏁存暟锛岄偅涔堝氨鏄暣闄わ紝鍚﹀垯灏辨槸娴偣闄わ紝姹備綑鐨勭鍙锋槸%銆1銆侀氬父鎯呭喌涓嬪彇妯¤繍绠(mod)鍜屾眰浣(rem)杩愮畻琚贩涓轰竴璋堬紝鍥犱负鍦ㄥぇ澶氭暟鐨勭紪绋嬭瑷閲岋紝閮界敤'%'绗﹀彿琛ㄧず鍙栨ā鎴栬呮眰浣欒繍绠椼傚湪杩欓噷瑕佹彁閱掑ぇ瀹惰鍗佸垎娉ㄦ剰褰撳墠鐜涓'%'杩愮畻绗︾殑鍏蜂綋鎰忎箟锛屽洜涓哄湪鏈夎礋鏁板瓨鍦ㄧ殑鎯呭喌涓嬶紝涓よ呯殑缁撴灉鏄笉涓...
  • c璇█涓%鏄粈涔杩愮畻绗,瀹冭〃绀轰粈涔?
    绛旓細閫夋嫨D銆傛槸姹備綑杩愮畻绗锛屼篃鍙妯闄よ繍绠楃锛岀敤浜庢眰浣欐暟銆%瑕佹眰涓や釜鎿嶄綔鏁板潎涓烘暣鏁帮紙鎴栧彲浠ラ殣寮忚浆鎹㈡垚鏁存暟鐨勭被鍨嬶級銆傛爣鍑嗚瀹氾細1銆佸鏋%宸﹁竟鐨勬搷浣滄暟涓鸿礋鏁版椂锛屽垯妯¢櫎鐨勭粨鏋滀负璐熸暟鎴栬0锛2銆佸鏋%宸﹁竟鐨勬搷浣滄暟涓烘鏁版椂锛屽垯妯¢櫎鐨勭粨鏋勪负姝f暟鎴栬0銆
  • 妯$殑杩愮畻鏄粈涔堟剰鎬?
    绛旓細1.妯¤繍绠楃殑鍩烘湰瀹氫箟锛氭ā杩愮畻鏄竴绉嶇敤浜庤绠楁暣鏁伴櫎娉曠殑鏂规硶锛屽畠杩斿洖闄ゆ硶鐨勪綑鏁伴儴鍒嗐傚湪鏁板涓紝濡傛灉涓や釜鏁存暟a鍜宐锛屽叾涓璪涓嶇瓑浜庨浂锛岄偅涔坅瀵筨鍙栨ā鐨勭粨鏋滃氨鏄痑闄や互b鐨勪綑鏁般2.妯¤繍绠楃殑璁$畻鍏紡锛氭ā杩愮畻鍙互鐢绗﹀彿"%"鏉ヨ〃绀恒傚浜庝袱涓暣鏁癮鍜宐锛宎瀵筨鍙栨ā鐨勮绠楀叕寮忓涓嬶細a%b=a-(a/b)*b鍏朵腑锛"...
  • c璇█涓殑%绗﹀彿鏄粈涔堟剰鎬?
    绛旓細鏄眰妯鐨勬剰鎬濓紝涓よ竟蹇呴』鏄暣鏁扮被鍨嬬殑锛屾眰妯″父鐢ㄧ鍙蜂负mod锛屽氨鏄皬瀛﹀鐨勬眰浣杩愮畻绗銆備緥濡50%23=4锛屽洜涓轰綑鏁颁负4锛屾墍浠ュ湪绋嬪簭涓繀椤讳繚璇佷袱杈逛负鏁存暟鎵嶆槸杩欎釜鎰忔濄傜被浼肩殑杩樻湁 +=锛-=锛*=锛/= 绛夈備絾鏄痑%=b杩欑杩愮畻鐨勬晥鐜囷紝瑕侀珮浜巃=a%b杩欑鐨勬晥鐜囷紝鍥犱负a%=b鏄洿鎺ュ湪a涓婂仛姹備綑杩愮畻锛宎=a%b鍒...
  • C璇█鍙妯¤繍绠楃鏄粈涔?
    绛旓細鍙妯¤繍绠楃閫氬父鐢ㄦ潵鍒ゆ柇涓涓暟鏄惁琚彟涓涓暟鏁撮櫎銆備緥濡傦紝濡傛灉浣犺鎵撳嵃瀛楁瘝琛ㄤ腑搴忓彿涓3鐨勫嶆暟鐨勫瓧姣嶏紝浣犲彲浠ヤ娇鐢ㄤ笅闈㈣繖娈典唬鐮侊細int x;for(x锛1; x<=26; x++)if((x%3)锛濓紳0)printf("%c"; x+64);涓婁緥灏嗚緭鍑哄瓧绗︿覆"cfilorux"锛屽嵆瀛楁瘝琛ㄤ腑搴忓彿涓3鐨勫嶆暟鐨勬墍鏈夊瓧姣嶃傚彇妯¤繍绠椾綑鏁鐨勫畾涔锛...
  • 本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网