当前位置: 首页 > article >正文

Python-计算机中的码制以及基础运算符(用于分析内存)

记录python学习,直到学会基本的爬虫,使用python搭建接口自动化测试就算学会了,在进阶webui自动化,app自动化

python基础2-码制

    • 计算机中的码制
      • 原码(True Form)
      • 反码(One's Complement)
      • 补码(Two's Complement)
    • 基础运算
      • 算术运算符:
      • 比较运算符:
      • 赋值运算符:
      • 逻辑运算符:
      • 位运算符(用于二进制位的操作):
          • 按位与:&
          • 按位或:|
          • 按位异或:^
          • 按位非:~
          • 左移:<<
          • 右移:>>
      • 成员运算符:
          • 属于:in(检查列表、元组、集合或字符串中是否存在某个元素)
          • 检查元素是否存在于列表中
          • 检查字符串中是否包含子串
          • 不属于:not in(检查列表、元组、集合或字符串中是否不存在某个元素)
          • 检查元素是否不存在于元组中
      • 身份运算符:
          • 恒等:is(检查两个引用是否指向同一个对象)
          • 比较两个变量是否引用同一个对象
          • 不恒等:is not(检查两个引用是否不指向同一个对象)
          • 检查两个变量是否引用不同的对象
          • 在Python中,字符串是不可变对象,所以相同的字符串字面量可能会引用同一个对象
      • 运算符优先级别
      • 逻辑与(and)短路
        • 逻辑或(or)短路
        • 逻辑或短路示例
        • 组合逻辑运算
        • 检查变量是否为正数
    • 实践是检验真理的唯一标准

计算机中的码制

原码、反码和补码是计算机科学中用于表示整数的二进制编码方式,特别是在处理有符号整数时。这些概念主要用于简化计算机中的算术运算,尤其是在进行加减法时。

原码(True Form)

定义:原码是一种最直观的二进制编码方式,它用第一位表示符号(0表示正,1表示负),其余位表示数值本身。
优点:易于理解和转换,直接反映了数值的正负和大小。
缺点:在进行加减运算时较为复杂,因为需要特别处理符号位。
示例:

十进制的 +5 在原码中表示为 0000101(假设使用5位,最左边的位是符号位)。
十进制的 -5 在原码中表示为 1000101。

反码(One’s Complement)

定义:反码用于表示有符号数的一种方式,正数的反码与其原码相同,负数的反码是其原码除符号位外,其他各位取反(0变1,1变0)。
优点:简化了减法运算,可以通过将减数取反然后加1,转换为加法运算。
缺点:0的表示不唯一,正0和负0的反码不同,这可能导致一些混淆。
示例:

十进制的 +5 在反码中表示为 0000101。
十进制的 -5 在反码中表示为 1111010。

补码(Two’s Complement)

定义:补码是目前最常用的有符号数表示方式,正数的补码与其原码相同,负数的补码是在其反码的基础上加1。
优点:
0的唯一性,没有正0和负0的区别。
简化了算术运算,特别是减法可以直接转换为加法。
溢出检测简单,可以通过检查结果是否越界来判断。
缺点:对初学者来说,理解补码表示的负数可能不如原码直观。
示例:

十进制的 +5 在补码中表示为 0000101。
十进制的 -5 在补码中表示为 1111011。
码制这个东西了解即可,如果大家有一天可以接触到内存溢出并且需要实时监控二进制时,你已经是一个大佬了,可以分析任何软件的性能做出优化等,其实很多库自带检查内存,比去找某个变量对的进程值快的多,记住:用轮子往往比造轮子简单且有效,但创造往往更有价值和意义
注意点:补码补码是原码,计算机中所有的数据都是用补码二进制标识,如果需要转换成十进制,需要先把补码转换成原码,最后把原码的二进制转换为十进制即可。

基础运算

算术运算符:

加法:+
减法:-
乘法:*
除法:/
地板除法://(结果向下取整)
模运算(求余数):%
幂运算:**

比较运算符:

等于:==
不等于:!=
大于:>
小于:<
大于等于:>=
小于等于:<=

赋值运算符:

单赋值:=
同时赋值:a = b = 0(Python 3.8+)
加法赋值:+=
减法赋值:-=
乘法赋值:*=
除法赋值:/=
地板除法赋值://=
模运算赋值:%=
幂运算赋值:**=

逻辑运算符:

逻辑与:and
逻辑或:or
逻辑非:not

位运算符(用于二进制位的操作):

按位与:&
A = 60
B = 13
result = A & B
print(result)  # 输出结果为12
按位或:|
A = 60
B = 13
result = A | B
print(result)  # 输出结果为61
按位异或:^
A = 60
B = 13
result = A ^ B
print(result)  # 输出结果为49
按位非:~
A = 60
result = ~A
print(result)  # 输出结果为-61
左移:<<
A = 60
shift_amount = 2
result = A << shift_amount
print(result)  # 输出结果为240
右移:>>
A = 60
shift_amount = 2
result = A >> shift_amount
print(result)  # 输出结果为15

成员运算符:

属于:in(检查列表、元组、集合或字符串中是否存在某个元素)
检查元素是否存在于列表中
my_list = [1, 2, 3, 4, 5]
element = 3

if element in my_list:
    print(f"{element} is in the list.")
else:
    print(f"{element} is not in the list.")
检查字符串中是否包含子串
my_string = "Hello, World!"
substring = "World"

if substring in my_string:
    print(f'"{substring}" is in the string.')
else:
    print(f'"{substring}" is not in the string.')
不属于:not in(检查列表、元组、集合或字符串中是否不存在某个元素)
检查元素是否不存在于元组中
my_tuple = (10, 20, 30, 40)
element = 50

if element not in my_tuple:
    print(f"{element} is not in the tuple.")
else:
    print(f"{element} is in the tuple.")
##### 检查集合中是否不包含某个元素
my_set = {1, 2, 3, 4, 5}
element = 6

if element not in my_set:
    print(f"{element} is not in the set.")
else:
    print(f"{element} is in the set.")

身份运算符:

恒等:is(检查两个引用是否指向同一个对象)
比较两个变量是否引用同一个对象
a = [1, 2, 3]
b = a  # b现在引用列表a
c = [1, 2, 3]  # c是一个新的列表对象

print(a is b)  # 输出 True,因为a和b引用同一个对象
print(a is c)  # 输出 False,因为a和c引用不同的对象
不恒等:is not(检查两个引用是否不指向同一个对象)
检查两个变量是否引用不同的对象
a = "hello"
b = "hello"
在Python中,字符串是不可变对象,所以相同的字符串字面量可能会引用同一个对象
print(a is b)  # 可能输出 True,因为a和b可能引用同一个字符串对象

c = "world"
print(a is not c)  # 输出 True,因为a和c引用不同的对象

运算符优先级别

Python中的运算符优先级如下(从高到低):
括号 ((), [], {}):改变运算顺序。
指数 (**):幂运算。
一元运算符:如负号 - 和逻辑非 not。
乘法和除法 (*, /, //, %):从左到右执行。
加法和减法 (+, -):从左到右执行。
比较运算符 (<, <=, >, >=, !=, ==):从左到右执行。
身份运算符 (is, is not):从左到右执行。
位运算符:按位与 &、按位或 |、按位异或 ^、左移 <<、右移 >>。
逻辑运算符:逻辑与 and、逻辑或 or。

逻辑与(and)短路

对于逻辑与操作,如果第一个操作数是假的(False),那么整个表达式的结果必定为假,因此第二个操作数不会被求值。

#### 定义一个函数,如果被调用,会抛出异常
def will_fail():
    raise Exception("Something went wrong")

#### 逻辑与短路示例
try:
    False and will_fail()  # 这行代码不会抛出异常
except Exception as e:
    print(e)  # 这行代码不会被执行

print("Expression evaluated.")  # 这行代码会被执行
逻辑或(or)短路

对于逻辑或操作,如果第一个操作数是真的(True) ,那么整个表达式的结果必定为真,因此第二个操作数不会被求值。

#### 定义一个函数,如果被调用,会抛出异常
def will_fail():
    raise Exception("Something went wrong")
逻辑或短路示例

try:
True or will_fail() # 这行代码不会抛出异常
except Exception as e:
print(e) # 这行代码不会被执行

print(“Expression evaluated.”) # 这行代码会被执行



```csharp
#### 逻辑非(not)短路# 逻辑非示例
result = not False  # result为True
组合逻辑运算
a = True
b = False
c = True

#### 这个表达式相当于 (a and b) or c
result1 = a and b or c  # 结果为True,因为c为True

#### 使用括号改变运算顺序
result2 = (a and b) or c  # 结果为False,因为(a and b)True

#### 另一个组合逻辑运算
result3 = not a and b  # 结果为False,因为not a为False

print(result1)  # 输出: True
print(result2)  # 输出: True
print(result3)  # 输出: False
检查变量是否为正数
x = 5
y = -3

#### 逻辑表达式:x大于0且y小于0
is_positive_x = x > 0
is_negative_y = y < 0

result = is_positive_x and is_negative_y

print(result)  # 输出: True

#### 检查至少一个变量是正数
result = is_positive_x or is_negative_y

print(result)  # 输出: True

sd1 = 0
sd2 = "a"
sd3 = 1
#注意点:在and逻辑与运算中,判断第一个是否为false,不为则判断下一个,遇到都是true时返回第二个操作数为true的值
result4 = sd2 and sd3
#注意点:在and逻辑与运算中,判断第一个是否为true,不为则判断下一个,遇到true时返回第二个操作数为true的值
result6 = sd1 or sd2

print(result4)
print(result6)

程序返回结果:

E:\Anaconda3\python.exe E:\Pycharm\pydemo\pythonProject\运算符优先级别.py 
Expression evaluated.
Expression evaluated.
True
True
False
True
True
1
a

我还是那句话,该说不说,用好逻辑运算符时及其重要的,实际开发中也有很多逻辑判断需要搭配if语句

实践是检验真理的唯一标准


http://www.kler.cn/a/429521.html

相关文章:

  • Vue如何构建项目
  • Spring Boot中的扫描注解如何使用
  • SpringBoot整合Easy-es
  • SSE部署后无法连接问题解决
  • Python在Excel工作表中创建数据透视表
  • Docker安装和卸载(centos)
  • 977. 有序数组的平方 C++
  • ue5 motion matching
  • 前缀和:JAVA
  • MySQL(库的操作)
  • React Native之升级React Navigation v3-v4
  • 物流,驶入AI下半场
  • Master EDI 项目需求分析
  • 在IDEA中使用Git进行版本控制
  • 一款基于开源路径规划引擎的交通可达性计算软件
  • Python 读取 Excel 表格并导出为 DBF 文件
  • 【JAVA】Java项目实战—项目选择(Web应用、命令行工具等)
  • uniapp radio-group实现点击radio选项后的文字选中选项
  • 人工智能的时代,如何拥抱人工智能,我们该何去何从?
  • Idea实现定时任务
  • Spark架构及运行流程
  • 【源码解读】SpringMMVC执行流程
  • 教程|使用Conda安装AlphaFold3-个人记录以及遇到的问题
  • CLIP论文提炼与代码实战
  • node.js 环境配置
  • leetcode207:课程表