购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 二进制数值和位串的逻辑运算

大多数编程语言都是按8位、16位、32位或64位来分组进行运算的,因此我们需要扩展这些逻辑运算,除了支持单位操作数,还应该支持逐位或按位(Bitwise)运算。给定两个数值,按位逻辑运算函数先对两个源操作数的第0位进行运算,得到结果操作数的第0位;然后对两个操作数的第1位进行运算,得到结果操作数的第1位,依此类推。例如,要对两个8位数值进行按位AND逻辑运算,就需要对两个数值中每个对应的位执行AND逻辑运算:

img

其他逻辑运算也可以使用这种方法运算。使用位串(例如二进制数值)时,可以使用AND和OR逻辑运算将每一位强制转换为0或1,以及使用XOR逻辑运算对每一位取反。这些运算可以选择性地操作数值中的某些位而不影响其他位。如果要保证一个8位的二进制数值X的第4~7位为0,只需将值X和二进制数值%0000_1111进行AND逻辑运算。按位AND逻辑运算将X的高4位强制转换为0,低4位则保持不变。将X和%0000_0001进行OR逻辑运算,然后再和%0000_0100进行XOR(异或)逻辑运算,可以把X的低位强制转换为1并对X的第2位取反。

使用AND、OR和XOR逻辑运算处理位串的方法被称为掩码(Masking)。该术语源自以下事实:可以使用某些特定的值(对AND运算来说是1,对OR和XOR运算来说是0)来“掩住”(Mask Out)或“露出”(Mask In)操作数中某些特定的位,在不影响这些位的同时把其他位强制转换为0、1或者取反。

一些语言提供了运算符,可以对操作数进行按位AND、OR、XOR及NOT逻辑运算。C/C++/Java/Swift语言使用连字符号(&)进行按位AND运算,使用管道符号(|)进行按位OR运算,使用插入符号(^)进行按位XOR运算,使用波浪符号(~)进行按位NOT运算,如下所示。

img

Visual Basic和Free Pascal/Delphi语言允许对整数操作数使用and、or、xor和not运算符。80x86汇编语言可以使用AND、OR、NOT和XOR指令。 jnXcPZnu/ny2Tmew+1NjJg17D9Tbowdcy2GyT5SdnMJLgJZmnZTCtpkE9hd9FyQr

点击中间区域
呼出菜单
上一章
目录
下一章
×