python位运算
什么是位运算
位运算就是把数字当成二进制来进行计算,位运算有六种:&(与), |(或), ^(异或), ~(非), <<(左移), >>(右移)
&(与)
&运算规则:两个位都为1,结果为1,否则为0
# &(与)
a = 3
b = 9
print(a & b)
# a----0101
# b----1001
# a&b--0001
# a&b=1
## |(或)
|运算规则:两个位至少有一个为1,结果为1,否则为0
```python
# |(或)
a = 3
b = 9
print(a | b)
a----0101
b----1001
a|b--1101
a|b=11
<br>
## ^(异或)
^运算规则:两个位不同,结果为1,否则为0
```python
# ^(异或)
a = 3
b = 9
print(a ^ b)
# a----0101
# b----1001
# a^b--1100
# a^b=10
## ~(非)
~运算规则:对所有位取反,1变成0,0变成1
```python
a = 5
print(~a)
猜猜结果是多少?是不是以为是2,哈哈哈
看一下打印结果
```python
-6
what? 检查下计算过程
# a----101
# ~a--010
# ~a=2
按照运算规则,没错啊
这是为什么呢?其实,计算机中是以补码的形式来进行计算的
对于正数:
原码=反码=补码
对于负数:
反码=原码的符号位不变,其余位取反;
补码=反码+1
使用sys.getsizeof可以查看对象在内存空间占用的大小
import sys
a = 5
print(sys.getsizeof(a)) # 28
说明a在内存中占的位数是28
现在我们来一步一步等推算~a
a的二进制形式
0000 00000000 00000000 00000101
由于运算是以补码的形式进行,因此要将原码转化成补码,由于a为整数,因此其补码就等于原码
```python
# a的补码
0000 00000000 00000000 00000101
<br>
对a的补码进行~运算,结果为
```python
# 结果的补码
1111 11111111 11111111 11111010
到这里要注意了,计算机运算的时候是以补码的形式,但是显示到终端上还是以原码的形式,因此我们要把结果再转化回原码
由于结果为负数(符号为1),先把补码转化成反码,反码=补码-1
# 结果的反码
1111 11111111 11111111 11111001
再计算结果的原码
# 结果的原码
1000 00000000 00000000 00000110
再把结果的二进制转化成十进制形式,符号为1说明是负数,-(4+2)= -6,因此结果为-6
上面的计算过程只是让我们对计算机如何进行位运算有一个认识,实际上对于任意数a,~a = -(a+1),根本不用手工转化成二进制计算
## 对于整数a,a<<n等效于 a*2**n,也就是说移位运算可以替代乘法运算
<br>
## >>(右移位)
'>>'的规则:运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数
```python
a = 9
print(a >> 2) # 2
对于整数a,a<<n等效于 int(a/2**n),向右移位可以代替除法运算
python位运算的更多相关文章
- python 位运算【实测】
python 位运算符为 << 左移,>> 右移 3<<2 既 3 的二进制整体向左移两位 : : 可以这么算 3*(2的2次方)= 12 11>> ...
- python位运算版的算术四则运算
#!/usr/bin/python # -*- coding: utf-8 -*- class ElementOperator: def add(self, num1, num2): # 32bits ...
- python——位运算之进制转化
>>> a=0b001100 >>> a 12 >>> b=0o001100 >>> b 576 >>> c= ...
- python位运算之计算中位数
# -*- coding: utf-8 -*- # @Time : 2018/11/23 10:49 PM # @Author : cxa # @File : 1.py # @Software: Py ...
- 剑指offer用位运算实现两个数相加,及python相关的位操作
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 代码: # -*- coding:utf-8 -*-class Solution: def Add(self ...
- 利用位运算进行a+b的计算(Java&&Python)
题目链接 需要用到的位运算操作:异或(^).与(&).右移(<<) 异或运算:又称不进位加法,a^b得到的结果为a与b相加,但是需要进位的地方不进位得到的结果 与运算:找出来a和b ...
- Python语言中的按位运算
(转)位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加 ...
- Python 进制转换、位运算
一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: ' ...
- jave 逻辑运算 vs 位运算 + Python 逻辑运算 vs 位运算
JAVA中&&和&.||和|(短路与和逻辑与.短路或和逻辑或)的区别 博客分类: 面试题目 Java.netBlog 转自 :http://blog.csdn.net/web ...
随机推荐
- angularJS 路由加载js controller 未定义 解决方案
说明 本文主要说明,在angularJS框架使用中,angularJS 路由加载js controller 未定义 解决方案. 路由 $routeProvider 异步加载js 路由的基本用法,请查看 ...
- nginx+腾讯云免费ssl证书+阿里云ECS实现Https配置
1. 申请SSL证书: 首先我们需要到腾讯云那边申请一个ssl证书,对于个人博客类型的,建议采用免费版本,土豪除外 申请地址:https://console.cloud.tencent.com/ssl ...
- JavaScript ES6 核心功能一览
JavaScript 在过去几年里发生了很大的变化.这里介绍 12 个你马上就能用的新功能. JavaScript 历史 新的语言规范被称作 ECMAScript 6.也称为 ES6 或 ES2015 ...
- Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(2)
1.restful api介绍 1.前后端分离的优缺点 1.为什么要用前后端分离 1.pc.app.pad多端适应 2.SPA(单页面应用)开发模式开始流行 3.前后端分离职责不清 4.开发效率问题, ...
- Sublime Text3—软件安装、package control插件管理
一.简介 市面上的编辑器纷繁复杂各有优点,好用的编辑器能让你工作事半功倍,先简单介绍下本文主角Sublime Text编辑器,下面简称Sublime. 1.可用于 Windows.Mac OS X 和 ...
- POJ 2240 Arbitrage (Bellman Ford判正环)
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions:27167 Accepted: 11440 Descri ...
- JS学习笔记Day1
一.JS概述 1.什么是JS? 是一种基于对象和事件驱动的客户端脚本语言: 运行环境:浏览器(通过浏览器解释执行) 2.JS产生于哪一年,哪个公司,是谁?第一个名字是什么? 1995年,网景公司.布兰 ...
- maomao的fft板子
\(QwQ\) #include <cmath> #include <cstdio> #include <cstring> #include <iostrea ...
- maomao的每日动向
\(2019.02.04\) \(Nothing\) \(to\) \(do\). \(2019.02.05\) - 早上睡到\(12\)点 - 中午下午:吃饭串门拜年 - 晚上:吹爆<流浪地球 ...
- C++: 带参数回调函数和不带参数的回调函数;
在C++中,回调函数的应用比较广泛且重要. 通过传递函数指针到其他地方,能够实现远程回调的作用,能够实现远程调用而不需要事件触发信号或者其他机制来实现,方便而快捷: 首先,回调函数有两种形式: 静态 ...