C语言中 2%3等于什么

Python07

C语言中 2%3等于什么,第1张

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