and和or指令技巧小记

技巧小记

and 指令
  • 按位与
  • 作用:只将某一位变成0,而其他位保持不变
  • 使用:谁要变0,谁就和0与
  • 示例:将一个小写的英文字母b变成大写B。
  • 思路:b的ASCII表示为0110 0010b,只需要把第5位(从最右边一位作为0位,开始算起)变成0就可以。所以第5位要变0,那就第五位需要和0与。数学上习惯把A-B中的A称为被减数,因为要从它里面减,它要减少,所以是被减的那个;B称为减数,因为B标明到底要减多少个,类似指令指针寄存器IP,可以看做为一个偏移。所以这里为了方便说明问题,借用数学里面的这种方式,将A and B中的A称为被与数,将B称为与数。这里,与数有一定的技巧,或者说与数可以当作一个模板。什么样的模板呢?其实就两个模板,分别是0000 0000b和1111 1111b,根据问题的不同,选用不同的模板。对于刚才的小写转大写问题,因为要将第5位变成0,还是那句话,谁要变0谁就和0与,所以第五位就要和0与上一与了。怎么与?直接与吗?显然不可能,0110 0010b有8位,0只有一位,这不是以大欺小么。别忘了刚才的模板,对于这个问题明显要选用1111 1111b这个模板了,有所谓万“1”丛中一朵“0”,只需要将模板中第5位变成0(即1101 1111b),将它作为与数和被与数进行and,就可以完成替换被与数中指定位为0的操作。
					被与数				0110 0010b    b      62H
		  and         与数			&	1101 1111b	  与模板
		----------------------    --------------------------
			   按位与的结果				0100 0010b    B		 42H
or 指令
  • 按位或
  • 作用:只将某一位变成1,而其他位保持不变
  • 使用:谁要变1,谁就和1或
  • 示例:将一个大写的英文字母B变成小写b。
  • 思路:万“0”丛中一朵“1”,和上面and的思想类似
			        被或数				0100 0010b    B      42H
		   or         或数			|	0010 0000b	  或模板
		----------------------    --------------------------
			   按位或的结果				0110 0010b    b		 62H
发布了42 篇原创文章 · 获赞 18 · 访问量 7559

猜你喜欢

转载自blog.csdn.net/weixin_44395686/article/details/104790290