美文网首页
第三章 运算符

第三章 运算符

作者: 天刀笑剑钝 | 来源:发表于2018-08-29 22:53 被阅读0次

    """

    第三章 运算符

    运算符:就是有特殊计算规则的符号

    操作数:参与运算的数据

    运算符可以根据操作数的不同,分为N元运算符

    """

    # 1+2  二元运算符

    # a-b

    # -1   一元运算符

    # 运算符和操作数结合起来,就是表达式

    """

    1. 算数运算符

    + - * /

    // 向下取整

    %  取模

    ** 求幂

    """

    a=21

    b=10

    print(a+b)

    print(a-b)

    print(a/b)

    print(a*b)

    # //向下取整,向负无穷大方向取整

    # 做除法运算时,商向下取整

    print(10//3)

    print(-10//3)

    # %取模  是数学意义上取余数

    # 被除数 = 除数 * 商+余数

    # 余数  = 被除数-除数*商 需要记住这样的公式

    # 在python中 % 运算中 商:向下取整

    # 10%3

    # 10-3*3=1

    print(10%3)

    # -10%3

    #-10-3*-4=-10+12=2

    # -3.3335   -4

    print(-10%3)

    # 真正的取余math函数下

    #** 求幂

    print(2**5)

    # 2. 比较运算符(关系运算)

    # 返回值是布尔类型

    # ==判断内容是否相等

    # !=判断内容是不是不相等   python2中<>

    # >  >=  <  <=

    print(21==21)

    print(21!=21)

    print(21<22)

    # 3. 身份运算符:判断对象的内存地址是否相同(对象是否是一个)

    # is   : 判断是同一片内存

    # is not:判断不是同一片内存

    a=1

    b=1

    #基础数据类型(数值、字符串、字节、布尔)

    print(a==b)

    print(a is b)

    print(id(a),id(b),"判断a的id 和b的id")

    # 如果是列表这种对象

    li1=[1,2,3]

    li2=[1,2,3]

    print(li1==li2)

    print(li1 is li2)

    # java中

    # ==跟python中is类似代表内存是否一个

    # equals跟python中==类似

    # id(o)  能够显示当前o对象所在的内存地址

    print(id(li1),id(li2))

    # is 和==的区别

    #is比较的是内存(对象)是否是同一个

    #==比较的是内容是否相同

    #  练习:

       #1. 7%3    -7%3     7%-3

    # 余数=被除数-除数*商  商向下取整

    # 7-3*2=1

    print(7%3)

    # -7-3*(-3)=2

    print(-7%3)

    # 7-(-3)*(-3)=-2

    print(7%-3)

      #2. 定义一个a=5  b=2+3 判断是一下 a==b ?  a is b?

    a=5

    b=2+3

    print(a==b)

    print(a is b)

    # 4. 逻辑运算符(布尔运算符)

    # 返回值可能是布尔类型,也可能是计算值

    # and  与:如果and左右 两侧都是True,则返回True,否则返回False

    # or   或:如果or左右两侧都是False,则返回False,否则返回True

    # not  非:布尔结果取反

    print(True and True)

    print(True and False)

    print(False and False)

    print(False or False)

    print(True or False)

    print(True or True)

    print(3==3 and 2!=3)

    a=1

    b=2

    c=3

    print(aa)

    print(aa)

    # 记住,任何一个 类型都可以转换成布尔 类型

    # 在逻辑运算符的操作中可以直接使用其他类型。

    print(1 and 2)

    # 短路现象(重要):

    # and : 当第一个表达式为假,则后面的表达式不执行

    # or:  当第一个表达式为真,则后面的表达式不执行

    # True and True ----True

    # False and --------False

    # 0 and print("ddddddd")  and的短路现象的证明

    # 1 and print("ddddd")  and的短路现象的证明

    # True or True/False-----True 

    # False or True/False- 

    # 1 or print("cccccc")  or短路现象的证明

    print(0 or print("cccccc"))  or短路现象的证明

    # s=null

    # s.fun()

    # if s!=null and s.fun()....

    a=print("hello world")

    print(a)

    print(bool(None))

    print("aaa")  or  print("bbbb")

    print(0 or print("cccccc"))

    # a=input("请输入一个数")

    # print(a)

    #

    # s=abs(-100)

    # print(s)

    # 5. 位运算

    """

    正数:原码,反码,补码就是二进制码

    负数:

    原码:正数的二进制,最高位变1

    反码:符号位不变,其余取反

    补码:反码+1

    计算机中都是以补码形式存储、运算,不管是正数还是负数

    补码变回原码:补码基础上找到反码,+1----变回原码

                 跟-1 之后再找反码是一致的。

    """

    # -10 取原码反码和补码

    # (1)先取合适的位数4位机或者8位机 16位机

    # 4位机,最小的负数 -7

    # 8位机,最小-127

    # 16位机,最小的负数

    # (2)对应正数的原码找到

    #在8位机上

    #10 的原码 00001010

    # (3)将最高位变1 ,就是定义负数的原码

    #-10的原码 10001010

    # 反码     11110101

    # 补码     11110110

    # 补码参数运算之后,仍然得到补码,需要再变回原码。

    # 需要观察最高位是不是1,

    # 如果最高位是1,那么证明结果是负数,就必须变回原码。

    # 如果最高位是0,那么证明结果是整数,则不需要再改变(正数的原码反码补码相同)

    # -1+2  使用手工模拟计算机

    """

    (1) 估计使用四位机进行运算

    (2) 获得两个操作数的补码:如果是负数,

    需要先找到对应正数的原码,再找到负数的原码,再找到负数的反码,补码

    (3) 运算的 结果,观察最高位是不是1,如果是1,那么证明是负数,需要变回原码。

    """

    # 补码

    # -1  1111

    # 2   0010

    #    10001  0001  十进制 1

    # 练习:-3-4

    #-3  0011----- 1011-----1100--------1101补码

    #-4  0100----- 1100-----1011--------1100补码

                                     # 11001--负数---补码

                                     #  1111-----原码  -7

    # -6-6

    # 8位机

    #-6   00000110------10000110-------11111001-----11111010 补码

    # 11111010

    # 11111010

    #111110100---11110100补码----10001100----十进制 -12

    print(bin(-6-6))

    # 位运算

    #&  按位与

    #|  按位或

    #^  按位异或

    #~ 按位取反

    #(1)&  按位与:同时为1,结果为1,否则为0

    # 0010

    # 1111

    # 0010  按位与结果

    # 0010

    # 0101

    # 0000  按位与结果

    # -1&2

    print(-1&2)

    # -1   1111

    # 2    0010

    #      0010 ---十进制2

    # 60&-13

    # print(60&-13)

    # 60---------------00111100补码

    # -13--10001101----11110011补码

    #                  00110000原码反码和补码

    # 十进制            2**5+2**4=48

    print(bin(13))

    #(2)|  按位或:两个同时为0时,结果为0,否则为1

    # 0101

    # 1100

    # 1101

    print(60|-13)

    # 60---------------00111100补码

    # -13--10001101----11110011补码

    #                  11111111补码----10000001--原码  -1

    # (3)^ 按位异或,如果两个一样则为0,不一样则为1

    # 0101

    # 1100

    # 1001

    print(60^-13)

    # 60---------------00111100补码

    # -13--10001101----11110011补码

    #                  11001111补码----10110001 原码  -(2**5+2**4+1)=-49

    # (4)按位取反~:全部取反(包括符号位)

    # 0010

    # 1101

    print(~60)

    # 60---------------00111100补码

    #                  11000011补码-----10111101原码  -61

    # print(2**5+2**4+2**3+2**2+1)

    print(~-13)

    # -13--10001101----11110011补码

    #                  00001100补码------2**3+2**2=12

    # 6.赋值运算符

    # =赋值

    # += 自加

    # -=   *=   /=   %=  **=

    a=20

    # a=a+1

    a+=1

    print(a)

    a**=3

    print(a)

    # 7.成员运算符

    # in    :判断元素是否在一个序列中

    # 返回值是布尔类型

    # not in

    s="hello"

    print("h" in s)

    print("h" not in s)

    # 运算符的优先级

    # 算数运算符> 比较运算符 > 逻辑运算符> 赋值运算符

    y=3==5 and 6<4

    print(y)

    # 可以使用()调整优先级,计算机中没有[]  {}

    # 运算符运算的时候体现的是结合性,不是运算性

    # a+b*c

    相关文章

      网友评论

          本文标题:第三章 运算符

          本文链接:https://www.haomeiwen.com/subject/dcslwftx.html