第九节课:这些难缠的符号

一、先得讲讲二进制

9 + 1 = 10

0 + 1 = 1
1 + 1 = 10
10 + 1 = 11
11 + 1 = 100
100 + 1 = 101
101 + 1 = 110

二、难缠的符号

bin(0) 0b1
bin(2) 0b10
bin(3) 0b11

1. 难缠的符号之一 >>(二进制 - 右移) << (二进制 - 左移)

3 >> 1
1
8 >> 1
4

左移运算

1 << 1
2
1 << 2
4
1 << 3
8

左位移运算 a << N 结果是 a * (2**N)

2. 难缠的符号之二 & (按位与)

比较两个数字的二进制同一位,如果同一个位置的值都是1,则返回的值是1,否则为0

例1

>>> 10 & 20
0
>>> bin(10)
‘0b1010‘
>>> bin(20)
‘0b10100‘

1010
10100

比较时候,不足的位补0,如果同一个位置都是1,那么结果是1,否则就是0
01010
10100

00000

例二

>>> 40 & 32
32
>>> bin(40)
‘0b101000‘
>>> bin(32)
‘0b100000‘

101000

100000

100000 所以结果为 32
int(0b100000)

3. 难缠的符号之三 | (按位或)

比较两个数字的二进制同一位,同一个位置只要有一个是1,则返回的值是1,否则为0

>>> 32 | 100
100
>>> bin(32)
‘0b100000‘
>>> bin(100)
‘0b1100100‘

0100000

1100100

1100100

4. 难缠的符号之四 ^ (按位异或)
参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0
运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;

5. 难缠的符号之五 ~
参加运算的一个数据,按二进制位进行“取反”运算。
运算规则:~1=0; ~0=1;

三、其他
1. &基偶的判定
a & 1 结果为0 则是偶数 否则为奇数(原理:奇数的最后一位一定是1) 这个算法的速度更快.

2. 计算机容量
一个文件 11866字节 转换成M 11866 << 10

3. 真真假假不知晓

>>> True & False
False
>>> True & True
True
>>> False & False
False
>>> True & True & True
True
>>> True & True & False
False
>>> False & True & False
False

四、回头看看这道题

aa = [(x*(x/2)>>0, x*(x%2)) for x in xrange(4)]
print [((x>>1)<<1, (x&1)<<1) for x in xrange(4)]
时间: 2025-01-15 03:49:44

第九节课:这些难缠的符号的相关文章

Linux学习第九节课-shell脚本编程

Linux第九节课 -------------------------------------------------------------------------------------------------------------------------------- 程序:算法+数据结构 数据:程序的核心 算法:处理数据的方式 程序编程风格 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 高级编程语言 编译:高级语言→编译器→机器代码→执行,例如c,c++等

C#第九节课

这节课主要是展示了各种大家的实验程序 说几个感受 创意都很棒啊! 我觉得大家都很厉害...比如wwx的游戏,用到了游戏引擎...据说ltp他们组的也是用到了游戏引擎 其次觉得我这个前端似乎并没有艺术细菌!界面并不是很美观.... 比较新颖的一些功能就是那些嵌入了游戏引擎的... 然后发现了自己组的一些不足...比如数据库比较弱...当然了我们的程序因为不涉及到数据库.不过数据库还是需要学一学的. 说一点自己组实验的技术 WPF平台的跳转我用了这样一段代码来实现 private void AllA

Linux学习第九节课(2019.9.22)

今晚老刘说了第7张的raid0,raid1,raid5,raid10的区别以及配置阵列+备份盘:然后说了LVM逻辑卷管理器的部署以及扩容缩小:最后说了逻辑卷的快照以及删除逻辑卷的方法.不知不觉过上了9节课,总共20节课(其实就是,2-18节是主要考试内容),那就是说已经过了一半,心里还是不怎么踏实,需要继续努力学习.老刘硬广:linuxprobe.com------------------------------------------------------------------------

0527 第九节课

一.文件的打包和压缩 1.compress/uncompress compress [options] file     *.Z -d:解压缩,等同于uncompress -c:输出到屏幕 -r:压缩目录 zcat file.Z > file 2.gzip/gunzip gzip [options]  file  *.gz -c:输出到屏幕 -d:解压缩 -k:保留源文件 -#:确定压缩比,1-9,1是最差9是最好,默认是6 gzcat:不解压预览压缩文件内容 gzip可以解压Z压缩文件 3.b

【非凡程序员】 OC第九节课 (KVO的应用)

这是一个QQ密码登陆地址和密码同时被修改时,通知用户QQ账号出现问题 该题难度主要在于判断监控的两次数据都是被修改的 有两种方案: ①定义一个可变的数组,把每次监控到的新旧数据添加进去,进行对比 ②定义一个变量,每修改一次,该变量就自加一次,判断为2时,通知用户 (1)main函数//  main.m//  QQ被盗////  Created by 非凡程序员 on 15/5/27.//  Copyright (c) 2015年 非凡程序员. All rights reserved.// #im

【非凡程序员】 OC第九节课 (KVC的运算)

买粽子的例子,主要输练习KVC的应用,(注意:必须建立一个数组,才能使用KVC的运算)详细代码如下: 1.main函数代码: #import <Foundation/Foundation.h> #import "Person.h" #import "zongZi.h" int main(int argc, const char * argv[]) {     @autoreleasepool {         // insert code here..

【非凡程序员】 OC第九节课 (KVC的使用)

今天主要学习了1.关键字@synthesize我们使用@property定义属性之后,有时候我们不想定义属性为_开头的参数名,如果我们想修改这个属性的名称,就可以使用@synthesize关键字来对属性名称进行修改 2.点语法①可以用作set和get调用Person *person1=[[Person alloc]init];person1.name="zhang"; //用法和[person1 setName:"zahng"]一样;NSLog("name

centos mysql 实战 第九节课

f

信管师培训之第九节课作业(变更管理+信息系统安全管理)

第16章 变更管理 1.变更管理的原则是首先? 变更管理的原则是首先建立项目基准.变更流程和变更控制委员会(也叫变更管理委员会). 2.国内较多的配置工具有哪些?(3个)国内使用较多的配配工具有Rational ClearCase.Visual SourceSafe(VSS).Concurrent Versions System(CVS) 3.CCB是决策机构还是作业机构? CCB是决策机构,而不是作业机构. 4.项目经理在变更中的作用是什么? 项目经理在变更中的作用是:响应变更提出者的要求,评