第一次打卡,关于位运算

今天在里人和同学一起学习了学校的python教程。发现很多同学对位运算那一部分知识不是很理解,我想通过刚刚学习的计算机组成原理的知识给大家解释一下哈哈哈哈。
之前大佬有直播过,在计算机中,数字是通过二进制补码来表示的,简单的说,是把十进制转化成0001010010这样的二进制串。而计算机表示数字的最小单元应该是字节,一般来说,一个字节包括了八位01数字。
第一次打卡,关于位运算_第1张图片
所谓位运算,即对这八个01数字位进行逻辑运算。那么我通过一个代码简单的说明一下位运算的含义(我不是大佬,可能说的不是很标准,请见谅)

def yu(a,b):  #定义一个与运算函数参数位ab
	c = a&b#c用来存储a与b的结果
	if c == 1:#判断c的真假
	    return True
	if c == 0:
	    return False
print(yu(1,1))(计算1与1 的逻辑

这是一个与或非运算的简单模板,将符号&与进行替换,可以得到或非等简单逻辑运算。
上述代码的输出大家可以自己测试一下。
下面简单介绍一下按位取反操作

print(~0

这是一个非常简单的例子,输出结果位-1
-1和0 有什么关系呢,其实我们可以从计算机内部的运算开始理解,我们知道计算机通过数字的补码进行存储和计算。0的补码是00000000,其实在原码和反码中,0是可以分为+0和-0的,感兴趣的同学可以去借一本计算机组成原理看看。
第一次打卡,关于位运算_第2张图片
将00000000按位取反后变成了11111111,显然最高位是1代表一个负数,根据补码的定义可以计算出,这是-1的补码,故答案是-1。(计算结果感兴趣的话加我好友问吧哈哈哈)
这也验证了位运算是对字节中的每一个位进行逻辑运算。
最后,举一个移位运算的例子我就要去复习六级了呜呜呜。

def zuoyi(a):
    a=a<<1
    return a
def youyi(a):
    a=a>>1
    return a
print(zuoyi(128))
print(youyi(128))

输出的结果分别是256和64,是不是惊喜的发现一个是乘2,一个是除二。其实这个例子很特殊,128刚好是2的七次方也就是10000000,那么左移一位是100000000右移一位是01000000,转化为10进制后就可以看出答案了。对比十进制,左移一位乘10,右移一位除以十。是不是有感觉了。可以发现一个小结论,二进制中,左移一位乘以2,右移一位除以2,不过也有可能要考虑溢出的情况这个我们这次先不聊。
那么这就是我今天的学习感想了,讲错了大佬别打我哈哈哈。拜拜啦下期再见。

你可能感兴趣的:(笔记)