美文网首页Python全栈工程师
5.4-Python基础和原反码及表达式

5.4-Python基础和原反码及表达式

作者: BeautifulSoulpy | 来源:发表于2019-08-06 09:49 被阅读1次

    python基础语法

    逆境前行,能帮你的只有自己

    重点
    1.计算机基础:
    ^   按位异或运算符:当两对应的二进位相异时,结果为1    (a ^ b) 输出结果 49 ,二进制解释:0011 0001
    ~   按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x类似于 -x-1
    
    2.原码、反码、补码
    

    1.编程基础

    1.1 计算机语言
    人与计算机之间交互的语言

    机器语言
    一定位数组成二进制的0和1的序列,称为机器指令。机器指令的集合就是机器语言
    与自然语言差异太大,难学、难懂、难写、难记、难查错

    汇编语言
    用一些助记符号替代机器指令,称为汇编语言。ADD A,B 指的是将寄存器A的数与寄存器B的数相加得到的数放到寄存器A中
    汇编语言写好的程序需要汇编程序转换成机器指令
    汇编语言只是稍微好记了些,可以认为就是机器指令对应的助记符。只是符号本身接近自然语言

    1.2 语言分类

    低级语言
    面向机器的语言,分为机器语言和汇编语言

    高级语言
    接近自然语言和数学语言的计算机语言

    高级语言首先要书写源程序,通过编译程序把源程序转换成机器指令的程序

    1954年正式发布的Fortran语言是最早的高级语言,本意是公式翻译

    人们只需要关心怎么书写源程序,针对不同机器的编译的事交给编译器关心处理

    1.3 程序

    程序是一个指令序列,算法+数据结构=程序

    为了使计算机程序得以运行,计算机需要加载代码,同时也要加载数据。从计算机的底层来说,这是由高级语言(例如Java,C/C++,C#等)代码转译成机器语言而被CPU所理解,进行加载

    1.4 写程序难点

    理不清数据
    搞不清处理方法
    无法把数据设计转换成数据结构,无法把处理方法转换成算法
    无法用设计范式来进行程序设计
    世间程序皆有bug,但要会debug

    2.python简介

    2.1python解释器

    当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。

    由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

    CPython

    当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

    CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

    IPython

    IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

    CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

    PyPy

    PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

    绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

    Jython

    Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

    IronPython

    IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

    小结

    Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。

    3.python基础语法

    注释

    以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号“:”结尾时,缩进的语句视为代码块。

    ln[1]:asxprint('hello world') #这是注释     
        # 整行都是注释  print('hello world2')
    hello world
    

    数字

    分为整数、浮点数

    整数:Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。

    计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。

    浮点数:浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

    整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。

    ln [1]:7e9
    out[1]:7000000000.0
    ln [1]:100
    out[1]:100
    ln [1]:0.99
    out[1]:0.99
    

    字符串

    单双引号:字符串是以''或""括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。

    三引号:'''和"""单双三引号,可以跨行、可以在其中自由的使用单双引号,在字符串前面加上r或者R前缀,表示该字符串不做特殊的处理

    ln [1]:print('hello world')  hello world
    ln [2]:print("hello python")hello python
    ln [3]:print("'hello pythons'")'hello pythons'
    ln [4]:print("""welcome        to\       my\       blog""")welcome tomyblog
    ln [5]:print(r"""welcome        to\       my\       blog""")welcome to\my\blog
    

    转义序列

    \ \t \r \n ' "前缀r,把里面的所有字符当普通字符对待

    缩进

    约定使用4个空格缩进

    续行

    在行尾使用\,如果使用各种括号,认为括号内是一个整体,内部跨行不用\

    标识符

    1.一个名字,用来指代一个值
    2.只能字母、下划线和数字
    3.只能以字母或下划线开头
    4.不能是python的关键字,例如def、class就不能作为标识
    5. Python是大小写敏感的
    约定:不允许使用中文

    不允许使用歧义单词,例如class_在python中

    不要随便使用下划线开头的标示符

    python的语言类型

    Python是动态语言、强类型语言

    静态编译语言
    实现声明变量类型,类型不能再改变;编译时检查

    动态编译语言
    不用事先声明类型,随时可以赋值为其他类型;编程时不知道是什么类型,很难推断

    强类型语言
    不同类型之间操作,必须先强制类型转换为同一类型。print('a'+1)

    弱类型语言
    不同类型间可以操作,自动隐式转换,JavaScript中console.log(1+'a')

    python运算符

    Python语言支持以下类型的运算符:

    • 算术运算符
    • 比较(关系)运算符
    • 赋值运算符
    • 逻辑运算符
    • 位运算符
    • 成员运算符
    • 身份运算符
    • 运算符优先级
    python算术运算符
    ln [1]:1+1.496  #加法2.496
    ln [2]:3-1.111  #减法1.889
    ln [3]:3*7      #乘法21
    ln [4]:8/3      #除法2.6666666666666665
    ln [5]:8//3     #整除2
    ln [6]:2**5     #乘方算法32
    in [7]:567%10  #取余数7
    
    python比较运算符

    以下假设变量a为10,变量b为20:

    运算符 描述 实例
    == 等于 - 比较对象是否相等 (a == b) 返回 False。
    != 不等于 - 比较两个对象是否不相等 (a != b) 返回 true.
    <> 不等于 - 比较两个对象是否不相等 (a <> b) 返回 true。这个运算符类似 != 。
    > 大于 - 返回x是否大于y (a > b) 返回 False。
    < 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。 (a < b) 返回 true。
    >= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
    <= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 true。

    以下实例演示了Python所有比较运算符的操作:

    ln [1]:a = 21       b = 21        
    if  a == b :          
      print ("a 等于 b")       
    else:          
      print ("a 不等于 b")
    a 等于 b
    
    ln [2]:a = 21       b = 10       
    if  a != b :          
      print ("a 不等于 b")       
    else:          
      print ("a 等于 b")
    a 不等于 b
    
    ln [3]:a = 21       b = 21        if  a >= b :          print ("a >= b")       else:          print ("a < b")a >= b
    
    python比较运算符

    按位运算符是把数字看作二进制来进行计算的
    二进制口诀:8421

    十进制 十六进制 二进制 Symbol 十进制 十六进制 二进制 Symbol
    0 00 0000 0000 NUL 64 40 0100 0000 @
    1 01 0000 0001 SOH 65 41 0100 0001 A
    2 02 0000 0010 STX 66 42 0100 0010 B
    3 03 0000 0011 ETX 67 43 0100 0011 C
    4 04 0000 0100 EOT 68 44 0100 0100 D
    5 05 0000 0101 ENQ 69 45 0100 0101 E
    6 06 0000 0110 ACK 70 46 0100 0110 F
    7 07 0000 0111 BEL 71 47 0100 0111 G
    8 08 0000 1000 BS 72 48 0100 1000 H
    9 09 0000 1001 TAB 73 49 0100 1001 I
    10 0A 0000 1010 LF 74 4A 0100 1010 J
    11 0B 0000 1011 VT 75 4B 0100 1011 K
    12 0C 0000 1100 FF 76 4C 0100 1100 L
    13 0D 0000 1101 CR 77 4D 0100 1101 M
    14 0E 0000 1110 SO 78 4E 0100 1110 N
    15 0F 0000 1111 Sl 79 4F 0100 1111 O
    16 10 0001 0000 DLE 80 50 0101 0000 P
    17 11 0001 0001 DC1 81 51 0101 0001 Q
    18 12 0001 0010 DC2 82 52 0101 0010 R
    19 13 0001 0011 DC3 83 53 0101 0011 S
    20 14 0001 0100 DC4 84 54 0101 0100 T
    21 15 0001 0101 NAK 85 55 0101 0101 U
    22 16 0001 0110 SYN 86 56 0101 0110 V
    23 17 0001 0111 ETB 87 57 0101 0111 W
    24 18 0001 1000 CAN 88 58 0101 1000 X
    25 19 0001 1001 EM 89 59 0101 1001 Y
    26 1A 0001 1010 SUB 90 5A 0101 1010 Z
    27 1B 0001 1011 ESC 91 5B 0101 1011 [
    28 1C 0001 1100 FS 92 5C 0101 1100 /
    29 1D 0001 1101 GS 93 5D 0101 1101 ]
    30 1E 0001 1110 RS 94 5E 0101 1110 ^
    31 1F 0001 1111 US 95 5F 0101 1111 _
    32 20 0010 0000 (space) 96 60 0110 0000 `
    33 21 0010 0001 ! 97 61 0110 0001 a
    34 22 0010 0010 " 98 62 0110 0010 b
    35 23 0010 0011 # 99 63 0110 0011 c
    36 24 0010 0100 $ 100 64 0110 0100 d
    37 25 0010 0101 % 101 65 0110 0101 e
    38 26 0010 0110 & 102 66 0110 0110 f
    39 27 0010 0111 ` 103 67 0110 0111 g
    40 28 0010 1000 ( 104 68 0110 1000 h
    41 29 0010 1001 ) 105 69 0110 1001 i
    42 2A 0010 1010 * 106 6A 0110 1010 j
    43 2B 0010 1011 + 107 6B 0110 1011 k
    44 2C 0010 1100 , 108 6C 0110 1100 l
    45 2D 0010 1101 - 109 6D 0110 1101 m
    46 2E 0010 1110 . 110 6E 0110 1110 n
    47 2F 0010 1111 / 111 6F 0110 1111 o
    48 30 0011 0000 0 112 70 0111 0000 p
    49 31 0011 0001 1 113 71 0111 0001 q
    50 32 0011 0010 2 114 72 0111 0010 r
    51 33 0011 0011 3 115 73 0111 0011 s
    52 34 0011 0100 4 116 74 0111 0100 t
    53 35 0011 0101 5 117 75 0111 0101 u
    54 36 0011 0110 6 118 76 0111 0110 v
    55 37 0011 0111 7 119 77 0111 0111 w
    56 38 0011 1000 8 120 78 0111 1000 x
    57 39 0011 1001 9 121 79 0111 1001 y
    58 3A 0011 1010 : 122 7A 0111 1010 z
    59 3B 0011 1011 ; 123 7B 0111 1011 {
    60 3C 0011 1100 < 124 7C 0111 1100
    61 3D 0011 1101 = 125 7D 0111 1101 }
    62 3E 0011 1110 > 126 7E 0111 1110 ~
    63 3F 0011 1111 ? 127 7F 0111 1111
    运算符 描述 实例
    & 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释:0000 1100
    按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 (a| b) 输出结果 61 ,二进制解释:0011 1101
    ^ 按位异或运算符:当两对应的二进位相异时,结果为1 (a ^ b) 输出结果 49 ,二进制解释:0011 0001
    ~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x类似于 -x-1 (~a ) 输出结果 -61 ,二进制解释:1100 0011, 在一个有符号二进制数的补码形式。
    << 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 a << 2 输出结果 240 ,二进制解释:1111 0000
    >> 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数 a >> 2 输出结果 15 ,二进制解释:0000 1111
    a = 21       
    a=60         #60=0011 1100       
    b=13         #13=0000 1101       
    c=a & b;     #计算 & 运算符       
    print(c)  
    12
    
    a=60         #60=0011 1100       
    b=13         #13=0000 1101      
    c=a | b;     #计算 | 运算符       
    print(c)
    61
    
    a=60        #60=0011 1100       
    b=13        #13=0000 1101       
    c=a ^ b;    #计算 ^ 运算符      
    异或运算符:当两对应的二进位相异时,结果为1 
    print(c)
    49
    
    按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x类似于 -x-1
    ~13      # 13=0000 1101
    -14
    
    4>>2     # 4= 0000 01001
    
    python运算符优先级
    运算符 描述
    ** 指数 (最高优先级)
    ~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
    * / % // 乘,除,取模和取整除
    + - 加法减法
    >> << 右移,左移运算符
    & 位 'AND'
    ^ | 位运算符
    <= < > >= 比较运算符
    <> == != 等于运算符
    = %= /= //= -= += *= **= 赋值运算符
    is is not 身份运算符
    in not in 成员运算符
    not and or 逻辑运算符

    原码、反码与补码

    计算机中数据是怎么放到内存中的?
    原码、反码、补码;负数表示法(***)
    计算机中正数的补码、反码、原码都是一样的;负数补码的补码就是原码;
    机器码:

    补码是留给计算机放在内存中自己玩的,你要用,计算机会先转换为原码,原码更贴近于人;

    1000 0000     (-1)   #负数最高位1
    
    0000 1100   #12
    1111 0011    #结果取反  补码  1  负数
    1000 1101   #符号位不变(-1),按照位置取反后加1    -13
    

    表达式Expression

    由数字、符号、括号、变量组成
    分为算术表达式,逻辑表达式,赋值表达式

    Python中,赋值即是定义(非常重要)

    相关文章

      网友评论

        本文标题:5.4-Python基础和原反码及表达式

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