二进制基本 算术运算 逻辑运算 位移运算 及其 汇编指令

二进制基本 算术运算 逻辑运算 位移运算 及其 汇编指令

· json · rss
Subscribe:

About

二进制基本 算术运算 逻辑运算 位移运算 及其 汇编指令


算术运算汇编指令:加add 减sub 乘mul 除div 余mod 开方sqrt

逻辑运算汇编指令:与and 或or 非not 异或xor 求大max 求小min

位移运算汇编指令:左移SHL 右移SHR 算数左移SAL 算术右移SAR 循环右移(相当于乘以2的多次方,但计算更快速。)


(11得1 10得1 01得1 11得0 10得0 01得0 00得1 00得0 八种情况 八卦)


一:算术运算:

加法:11得0(异或门) 进位1(与门) 10得1(异或门) 01得1(异或门) 00得0(异或门)

减法:11得0 10得1 01得1 借位1 00得0

乘法:按被乘数 每位权重,被乘数×1=被乘数(1×1=1 0×1=0),被乘数×0=全是0(1×0=0 0×0=0),每个结果 按位权重 相加。

除法:

1. 从左往右 按照被除数逐位比较,能除则减,不能则借位。

2. 记录每步的商,最后得到商和余数。

开方:


一切 算术运算,都可 归结 简化 为 基本 二进制 逻辑运算。


最初只有 与非 或非 逻辑门 电路,取反(反相器),之后 才是 与门 或门 电路。

{

在数字逻辑电路的发展过程中,最初确实只有与非门(NAND gate)和或非门(NOR gate),以及取反器(反相器,也称为非门或NOT gate)。这三种基本逻辑门是构建更复杂逻辑电路的基础。


与非门(NAND gate)是一种通用的逻辑门,因为它可以用来实现任何其他类型的逻辑门。通过适当的组合,与非门可以实现与门(AND gate)、或门(OR gate)、以及非门(NOT gate)的功能。例如:

两个与非门串联可以实现一个与门。

两个与非门并联可以实现一个或门。

单个与非门的输出端连接到其输入端之一可以实现一个非门。

由于与非门的这种灵活性,它被认为是一种“完备”的逻辑门,意味着它可以单独用来构建任何布尔逻辑函数。


或非门(NOR gate)同样是一种强大的逻辑门,它也可以用来实现所有其他类型的逻辑门。通过适当的组合,或非门也可以实现与门、或门和非门的功能。例如:

两个或非门串联可以实现一个与门。

两个或非门并联可以实现一个或门。

单个或非门的输出端连接到其输入端之一可以实现一个非门。

因此,无论是使用与非门还是或非门,都可以构建出所有必要的逻辑功能。这两种门都是数字电路设计中不可或缺的元素。随着技术的发展,直接的与门和或门也被广泛使用,但它们的基本构造仍然依赖于与非门和或非门的组合。

}

异或 最初 就是 异或门。取反 叫 同或门 电路。相同得1 不同得0。


二:逻辑运算:

与、或、非、与非、或非、异或、同或。


中文和英文简写:

与:and

或:or

非:not

与非:nand(not and)

或非:nor(not or)

异或:xor(x or)

同或:xnor(x not or)


有一个对应法则口诀:

与:and ->有0出0,全1出1。 1,1->1 1,0->0 0,1->0 0,0->0

或:or->有1出1,全0出0。1,1->1 1,0->1 0,1->1 0,0->0

非:not ->有1出0,有0出1。:1->0 0->1

与非:nand->先按与的操作,然后结果取反。1,1->0 1,0->1 0,1->1 0,0->1

或非:nor ->先按或的操作,然后结果取反。1,1->0 1,0->0 0,1->0 0,0->1

异或:xor->相异为1,相同为0。1,1->0 1,0->1 0,1->1 0,0->0

同或:xnor->相同为1,相异为0。1,1->1 1,0->0 0,1->0 0,0->1



11得1(与运算 或运算 同或运算)

10得0(与运算 或非运算 同或运算)

01得0(与运算 或非运算 同或运算)

10得1(或运算 与非运算 异或运算)

01得1(或运算 与非运算 异或运算)

00得0(与运算 或运算 异或运算)

11得0(异或运算 与非运算 或非运算)

00得1(同或运算 与非运算 或非运算)


2个二进制逻辑数得1个二进制逻辑数:排列组合有:2×2×2=8种情况 8种结果 6种逻辑运算(非运算 不算)


X86架构与ARM架构 CPU处理器 的 算术指令 以及 GPU显卡 算术指令 都 包含了 加减乘除 开方 运算。


与运算 与 或运算 不可逆,无法反推。


非运算 和 异或运算 可逆,可以反推。


C语言 位运算 异或运算 的 符号 "^"。

A^B=C

C^B=A

C^A=B

A可以是原文。B可以是秘钥。C可以是密文。可以加解密。


可以无需第三方变量 交换a与b的值:

a=a^b;

b=a^b;

a=a^b;



三:在计算机中,负数是以补码的形式表示的:


补码是一种二进制数的表示方法,它使得计算机中的加法和减法运算可以统一处理,简化了计算机的硬件设计。

在补码系统中,

正数的补码与其原码相同,

负数的补码是其原码除符号位外所有位取反(即0变1,1变0)后加1得到的。

这种表示方式有助于简化计算过程,尤其是在进行加减运算时,

因为补码允许使用同一种电路来处理加法和减法,从而减少了计算机内部电路的复杂性。


以8位二进制数为例,

+8的二进制表示为00001000,

其补码也是00001000。

而对于-8,首先找到其绝对值8的原码00001000,

然后除符号位外其他位取反得到11110111,

最后加1得到补码11111000。

这样,无论是正数还是负数,都可以用同样的规则来计算其补码,

进而在计算机中使用统一的加法器来进行所有的算术运算。


在计算机系统中,无论是加法、减法还是乘法和除法,补码都是处理有符号数的主要方式。

补码的使用简化了计算机的硬件设计,特别是对于减法和乘法这样的运算。

在乘法运算中,补码允许直接对操作数进行乘法操作,而无需担心符号位的处理,

因为补码表示法已经将符号位融入到数值的表示之中。


补码乘法的运算过程涉及到将被乘数和乘数转换为补码形式,然后进行乘法运算,

最后根据结果的符号位确定最终的符号,

并将乘积转换为补码形式以得到最终结果。

这种处理方式不仅适用于整数乘法,也适用于浮点数乘法,尽管浮点数的表示和运算更为复杂。