滴水三期:day02.3-逻辑运算

一、逻辑运算的引入

  • 如果现在只是将数据存到计算机的容器中,是没有任何意义的,我们还需要告诉计算机这些数据有什么用,让计算机对这些数做运算。所以我们知道计算机到底是如何做运算的,所以我们引入逻辑运算

二、逻辑运算

  • 由于计算机受硬件的限制影响,CPU再复杂可以理解为一条条的线路组成的,而电信号只有两种形式0和1,所以一般计算机的逻辑运算的对象都是二进制数

  • 逻辑运算分为:

    逻辑运算汇编符号C语言符号
    or|
    and&
    异或xor^
    not!

三、逻辑运算的应用

1.CPU是如何计算2+3

  • 我们如果用汇编语言写2+3,两个指令就可以搞定,但是对于计算机收到这个指令,计算机只会对以二进制存储的数据做逻辑运算得出结果,而计算机不会做加法运算

    mov eax,2
    add eax,3
    
  • CPU做逻辑运算

    #x,y,R为存储数据的容器
    
    2+3
    
    x:0010
    y:0011
    
    	0010	
    xor 0011
    ------------
    	0001        R:0001
    	
    	0010
    and 0011
    ------------
    	0010  <<1  得   0100       #<<1表示左移一位
    	
    此时计算机会判断0100是否全为0,如果全为0表示运算结束,将R中此时的值作为结果输出,如果不为0则将R中的值赋给x。0100赋给y再做一次同样运算
    
    	0001
    xor 0100
    -------------
    	0101         R:0101
    	
    	0001
    and 0100
    -------------
    	0000  <<1  得   0000
    
    判断0000全为0,则运算结束,将R中的值0101作为运算的结果,化成十进制即为5
    

2.如何获取某个值的第N位是0还是1

  • 比如现在某个寄存器中存了一个值,值化成二进制时,有些特殊的值每一位都有它的特殊含义,所以我们想要知道这个值的第N位是0还是1。如果我们把寄存器中的值取出来,一个一个数着看,就会很麻烦,但是如果做下面的运算,就会容易很多:

    #现在想要查看某寄存器中的值的第4位是0还是1,我们就可以将寄存器中的值与0x08做与运算,如果得到结果中有一个1,则这个值的第四位就是1,如果结果全是0,则值的第四位就是0
    
    		10001111
    and		00001000
    ----------------------
    		00001000
    

3.用亦或做加密解密

  • 如果进行简单的加密,可以使用亦或运算,因为选择一个双方都知道密钥,用此密钥与数据做亦或加密加密过后,别人如果没有密钥则不好解开这个密文,而对于接受方,使用相同的密钥再做一次亦或即可得到原来的明文值

    要加密的数据:2015			00100000		00010101
    		         	 ^	01010100	 ^	01010100
    		         	 ------------    ------------
    密钥:54				   01110100		   01000001
    					
    加密后的结果:			      74		       41
    					
    					
    						01110100		01000001
    		         	^	01010100	 ^  01010100
    		         	-------------     ------------
    						00100000		00010101
    					
    解密后的结果:				  20		       15
    
    

四、作业

1.八进制2-5

因为计算机做任何运算,都需要先将数据存到某数据宽度的寄存器中,所以一定要指明数据宽度!!

  • 2-5等于-3,这个-3要看存储容器的数据宽度了,如果数据宽度是8位,那么刚刚讲过有符号数是这么存储的:FF是最大的负数-1,那么往前推,FE表示-2,FD表示-3,即结果化成十六进制就是FD,至于最后答案要化成二进制还是八进制,计算机不管,计算机只管将-3在8位宽度的容器中表示为FD。同理如果是16位容器,则结果为FFFD;32位容器,则结果为FFFFFFFD。(其实不用下面的图也可以使用反码补码源码的计算将-3的结果计算出来)

    image-20211121142622525

    image-20211121154837282image-20211121154856093

2.只用逻辑运算计算2-3

2-3
假设数据宽度为4bit
-3在计算机中存储方式:先把-3表示出来1011,最高位为符号位,然后除符号位其他位取反最后加1即可(即原码转补码)
所以-3 = 1011 --> 1100 --> 1101 -->  D,即计算机收到-3后会将-3用二进制1101存储(数据宽度为4字节)

x:0010
y:1101

	0010
xor	1101
----------
	1111          R:1111
	
	0010
and	1101
----------
	0000   <<1   得0000
	
所以最终结果为1111,注意这只是计算机存储的形式,十六进制为F
根据计算机底层存储原理可以得到F表示最大的负数-1,可得到答案为-1;也可以通过1111除符号位取反1000,然后+1的1001,也可以得到答案是-1
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值