天池Python练习02-位运算

本文详细介绍了计算机科学中的位运算概念,包括原码、反码、补码的概念及其转换方法,并深入探讨了按位非、按位与、按位或、按位异或、左移和右移等基本位运算符的应用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1位运算

1.1原码 反码 补码

1.2按位非操作 ~

1.3按位与操作 &

1.4按位或操作 |

1.5按位异或操作 ^

1.6按位左移操作 <<

1.7按位右移操作 >>

1.8利用位运算快速计算

1.9利用位运算实现整数集合


1位运算

1.1原码 反码 补码

二进制有三种不同的表示形式:原码 反码 补码。计算机内部使用补码来表示
符号位 最高位为符号位 0表示正数 1表示复试
位运算中符号位也参见运算

原码 就是其二进制的表示 (有一位符号位)

0 0 00 00 11 ->  3
1 0 00 00 11 -> -3

反码 正数的反码就是原码 负数的反码符号位不变 其余位取反

0 0 00 00 11 -> 3
1 1 11 11 00 -> -3

补码 正数的补码就是原码 负数的补码是反码+1

0 0 00 00 11 -> 3
1 1 11 11 01 ->-3

1.2按位非操作 ~

~ 把补码中的0和1全部取反 有符号位的整数的符号位在运算中同样会取反

~ 1 = 0
~ 0 = 1

0 0 00 01 01 -> 5
~
1 1 11 10 10 ->-6

1 1 11 10 11 ->-5
~
0 0 00 01 00 -> 4

1.3按位与操作 &

两个对应全为1才为1

1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0

0 0 00 01 01 -> 5
&
0 0 00 01 10 -> 6

0 0 00 01 00 -> 4

1.4按位或操作 |

两个对应有一个为1就为1

1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

0 0 00 01 01 -> 5
|
0 0 00 01 10 -> 6

0 0 00 01 11 -> 7

1.5按位异或操作 ^

两个对应不同时为1
异或操作满足交换律和结合律

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

A:00 00 11 00
B:00 00 01 11

A^B:00 00 10 11
B^A:00 00 10 11

A^A:00 00 00 00
A^0:00 00 11 00

A^B^A = A^A^B = 00 00 01 11

1.6按位左移操作 <<

将二进制表示向左移动i位 后面补0

00001011 -> 11
11 << 3

01011100 -> 88

1.7按位右移操作 >>

将二进制表示向右移动i位 前面补0

00001011 -> 11
11 >> 2

00000010 ->2

1.8利用位运算快速计算

通过<< >> 快速计算2的倍数的问题

n << 1 -> 计算n*2

n >> 1 -> 计算n/2 负奇数运算不可用

n << m -> 计算n*(2^m) 既乘以2的m次方 

n >> m -> n*(2^m) 既除以2的m次方

1 << n -> 2^n

通过^快速交换两个整数

a ^= b
b ^= a
a ^= b

通过a & (-a) 快速获取a的最后为1位置的整数

00 00 01 01 ->5
&
11 11 10 11 ->-5

00 00 00 01 ->1

00 00 11 10 ->14
&
11 11 00 10 ->-14

00 00 00 10 ->2

1.9利用位运算实现整数集合

一个数的二进制表示可以看成是一个集合(0表示不在集合内 1表示在集合内)

设从右向左表示0~9
比如集合{1,3,4,8}可以表示为 01 00 01 10 10 而对应为位运算可以看做是对集合进行的操作

元素与集合的操作:
a | (1<<i)  ->  把i插入到集合中 
a & ~(1<<i) ->  把i从集合中删除
a & (1<<i)  ->  判断i是否属于该集合(0不属于,非零属于)

集合之间的操作:
a 补   -> ~a
a 交 b -> a & b
a 并 b -> a | b
a 差 b -> a & (~b)

python的bin()输出

print(bin(3)) 
>>>0b11

print(bin(-3)) 
>>>-0b11

print(bin(-3 & 0xffffffff)) 
>>>0b11111111111111111111111111111101

print(bin(0xfffffffd)) 
>>>0b11111111111111111111111111111101

print(0xfffffffd) 
>>>4294967293

我们从结果可以看出:
1. Python中 bin 一个负数(十进制表示),输出的是它的原码的二进制表示加上个负号,巨坑。
2. Python中的整型是补码形式存储的。
3. Python中整型是不限制长度的不会超范围溢出。

        所以为了获得负数(十进制表示)的补码,需要手动将其和十六进制数 0xffffffff 进行按位与操作,再交给 bin() 进行输出,得到的才是负数的补码表示。

<think>嗯,用户想了解Python相关的机器学习学习路径或资源,特别是学习路线图教程。首先,我需要整理出清晰的学习阶段,从基础到高级逐步推进。根据引用[1],Python的基础学习很重要,所以第一步应该是确保掌握Python的语法、数据结构以及常用库,比如NumPyPandas。接着,数学基础也是关键,线性代数、概率统计这些内容必不可少,用户可能需要一些资源来复习这些知识。 然后,机器学习入门阶段,用户需要了解基本概念算法,比如监督学习无监督学习,这时候引用[3]提到的scikit-learn库会很有用,因为它提供了很多现成的算法实现。实践项目也是重要的一环,Kaggle竞赛经典项目如房价预测可以帮助巩固知识。 深度学习部分可能需要学习TensorFlow或PyTorch,这部分内容比较深入,需要用户有一定的数学编程基础。最后,持续学习方面,论文阅读社区交流也很重要,引用[2]提到的资料下载交流群可能会有帮助。 用户可能是一个刚入门的新手,所以需要结构化的学习路径,避免信息过载。同时,他们可能希望有推荐的书籍或在线课程,比如吴恩达的课程或者《机器学习实战》这样的书籍。另外,需要注意引用提供的资源是否合适,比如引用[1]的Python教程是否适合机器学习方向,可能需要强调基础的重要性。还要检查是否有遗漏的重要知识点,比如数据处理特征工程,这些在机器学习项目中非常关键。最后,确保回答中的建议实用,能够引导用户从基础逐步提升,同时提供实际操作的资源,如GitHub项目或在线平台练习。</think># Python机器学习学习路线及资源推荐 ## 一、基础准备阶段 1. **Python编程基础** - 掌握$if/else$条件判断、$for/while$循环等基础语法 - 熟练使用$list$、$dict$、$tuple$等数据结构 - 学习面向对象编程基础 - 推荐资源:引用[1]中的Python基础学习教程 2. **数学基础** - 线性代数:矩阵运算、特征值分解 - 概率统计:条件概率、贝叶斯定理 - 微积分基础:导数、梯度概念 - 推荐公式: $$ \sigma(z) = \frac{1}{1+e^{-z}} \quad (\text{逻辑函数}) $$ ## 二、机器学习入门 1. **核心工具库** ```python # 数据处理三件套 import numpy as np import pandas as pd import matplotlib.pyplot as plt ``` 2. **算法学习路线** | 算法类型 | 代表算法 | 应用场景 | |----------------|------------------------|------------------| | 监督学习 | 线性回归、SVM | 房价预测、分类 | | 无监督学习 | K-means、PCA | 客户分群、降维 | | 集成学习 | 随机森林、XGBoost | 竞赛优化 | 3. **scikit-learn实践**(引用[3]) ```python from sklearn.datasets import make_blobs X, y = make_blobs(n_samples=1000, centers=3, n_features=2) ``` ## 三、深度学习进阶 1. **框架选择建议** - TensorFlow:工业级部署首选 - PyTorch:科研领域主流 - Keras:快速原型开发 2. **典型网络结构** $$ \text{CNN} = \text{卷积层} + \text{池化层} + \text{全连接层} $$ ## 四、学习资源推荐 1. **经典教材** - 《机器学习实战》- Peter Harrington -Python机器学习基础教程》- Andreas Müller 2. **在线课程** - 吴恩达《机器学习》(Coursera) - Fast.ai实战课程 3. **项目实践平台** - Kaggle竞赛(https://kaggle.com) - 阿里云天池 ## 五、持续提升建议 1. **论文阅读** - 定期研读NeurIPS、ICML会议论文 - 跟踪arXiv最新研究成果 2. **社区交流** - 参与引用[2]中提到的技术交流群 - 关注Reddit的r/MachineLearning板块
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值