C语言中,2%3等于2。
%是求余运算符,也叫模除运算符,用于求余数。
%要求两个操作数均为整数(或可以隐式转换成整数的类型)。
标准规定:
如果%左边的操作数为负数时,则模除的结果为负数或者0,
如果%左边的操作数为正数时,则模除的结构为正数或者0。
示例代码:
#include<iostream>
using namespace std
int main(){
char c = 253
int i =5
cout<<c%2<<endl
cout<<i%c<<endl
cout<<19%10%5<<endl
return 0
}
输出:
-1
2
4
c 为字符类型,其235对应二进制位0xFD,也就是-3的补码形式。则c变换为int 为-3
扩展资料:
取模运算(mod)和求余(rem)运算:
通常情况下取模运算(mod)和求余(rem)运算被混为一谈,因为在大多数的编程语言里,都用'%'符号表示取模或者求余运算。
在这里要提醒大家要十分注意当前环境下'%'运算符的具体意义,因为在有负数存在的情况下,两者的结果是不一样的。
对于整型数a,b来说,取模运算或者求余运算的方法都是:
1.求 整数商: c = a/b
2.计算模或者余数: r = a - c*b.
求模运算和求余运算在第一步不同: 取模求余运算在取c的值时,向0 方向舍入(fix()函数); 而求余取模运算在计算c的值时,向无穷小方向舍入(floor()函数)。
因此,当a和b符号一致时,求模运算和求余运算所得的c的值一致,因此结果一致。但是当符号不一致的时候,结果不一样。
具体来说,求模运算结果的符号和b一致,求余运算结果的符号和a一致。
在C语言中,%符号表示的是求余运算,在Python脚本中,%表示的是取模。
参考资料来源:百度百科-C语言
num=2时,num % 2 = 2%2 = 0
num % 3 = 2%3 = 2
not num % 3 = False
0 and False 的结果肯定是False,所以不会加到sum中。
# -*- coding:utf-8 -*-binaryDic={'+':float.__add__,
'-':float.__sub__,
'*':float.__mul__,
'/':float.__truediv__,
'%':float.__mod__,
'**':float.__pow__,}
unaryDic={'-':float.__neg__,
'+':float.__pos__,}
priorDic=dict((('**',3),('*',2),('/',2),('%',2),('+',1),('-',1)))
def is_float(s):
'判断是否浮点数字符'
return s.isdigit() or s=='.'
def is_prior(firOpf,secOpf):
'判断运算符的优先级'
if secOpf=='**':
return False
return priorDic[firOpf]>=priorDic[secOpf]
def wipe_brace(s,start=0):
's是以左括号开头的字符串'
'此函数将消去括号,求出括号内的值,并返回剩余字符'
pos=s.find(')',start)
if s[1:pos].count('(')==s[1:pos].count(')'):
return s[pos+1:] ,ieval(s[1:pos])
return wipe_brace(s,pos+1)
def get_Longest_number(s,num=''):
's是以左括号或数字开头的字符串'
'返回s首位开始的最长连续数字串和剩余字符串'
if not s :
return s,num
if s[0]=='(':
return wipe_brace(s)
if is_float(s[0]):
return get_Longest_number(s[1:],num+s[0])
return s,num
def get_val(fir='',opf='',sec=''):
'智能求值函数.能进行一元,二元或纯值运算'
if opf:
if sec:
return str(binaryDic[opf](float(fir),float(sec)))
return str(unaryDic[opf](float(fir)))
return fir
def get_safeSec(s,cmpOpf='**',neg='',safeSec='',):
'比较s的第一个二元运算符和cmpOpf的优先级'
'以便获得安全的第二个值'
if not s:
return s,get_val(safeSec,neg)
if not safeSec:
if s[0]=='+':
return get_safeSec(s[1:],cmpOpf,neg)
if s[0]=='-':
return get_safeSec(s[1:],cmpOpf,'' if neg=='-' else '-')
if is_float(s[0]) or s[0]=='(':
rest,safeSec=get_Longest_number(s)
return get_safeSec(rest,cmpOpf,neg,safeSec)
opfNum= 2 if s[:2]=='**' else 1
if is_prior(cmpOpf,s[:opfNum]):
return s,get_val(safeSec,neg)
rest,safeNum=get_safeSec(s[opfNum:],s[:opfNum])
return get_safeSec(rest,cmpOpf,neg,get_val(safeSec,s[:opfNum],safeNum))
def ieval(s='',fir='',opf='',sec=''):
'控制整个解析流程'
if not s:
return get_val(fir,opf,sec)
if not fir:
if s[0]=='-':
return ieval(s[1:],fir,'' if opf=='-' else '-')
if s[0]=='+':
return ieval(s[1:],fir,opf)
if is_float(s[0]) or s[0]=='(':
return ieval(*get_Longest_number(s),opf=opf)
if not sec:
if not opf:
opfNum= 2 if s[:2]=='**' else 1
rest,sec=get_safeSec(s[opfNum:],s[:opfNum])
return ieval(rest,fir,s[:opfNum],sec)
if s[:2]!='**':
return ieval(s,get_val(fir,opf))
rest,sec=get_safeSec(s[2:])
return ieval(rest,get_val(fir,'**',sec),opf)
return ieval(s,get_val(fir,opf,sec))
if __name__=='__main__':
test=['1+2*3*4*5+20',
'1+2*3',
'1.1+20.02+300.003',
'-2**2',
'(-2)**2',
'1+2*3**-2**(2-3)*2',
'-2**-2**-2**-2',
'(1+2)*(2+3)/(1-3)',
'((9+3)/2)',
'((1234)-1)',
'1-3*--+++-2**--+++((-2))**--+++-(1-2)**--+++-2*2+1*2**6%9',
'((1+3*(-2)**2)*((2%3+((3+3)*2**3+1))*(1-3)*(1+2)+5*6)*4)']
for x in test:
print(ieval(x),'___',eval(x))
结果:
>>>141.0 ___ 141
7.0 ___ 7
321.123 ___ 321.123
-4.0 ___ -4
4.0 ___ 4
3.309401076758503 ___ 3.309401076758503
-0.5582965649524321 ___ -0.5582965649524321
-7.5 ___ -7.5
6.0 ___ 6.0
1233.0 ___ 1233
6.242640687119286 ___ 6.242640687119286
-14352.0 ___ -14352