R语言 顺位逻辑运算
逐位逻辑运算用于在一个数字中逐位执行逻辑运算。这篇文章讨论了在R编程语言中如何使用位逻辑运算。
这些逻辑运算包括
操作符 | 描述 | 语法 |
---|---|---|
bitwOr | 位数或 | bitwOr(value1,value2) |
bitwXor | 位向XOR | bitwXor(value1,value2) |
bitWnot | 位数非 | bitwNot(值) |
bitwAnd | 位数和 | bitwAnd(val1,val2) |
bitwShiftL | 左移 | bitwShiftL(shiftvalue,value) |
bitwShiftR | 右移 | bitShiftR(shift,value) |
让我们详细讨论一下这些运算符。
bitwOr
R编程语言使用bitwOr函数对两个数字进行Bitwise OR操作。它将接受两个值作为输入并返回值。其中值可以是数字或列表/向量。
例子:
2=0010
3=0011
bitwOr(2,3) ---> 0010
& 0011
--------------
0011 ---> 3
计划
# bitwise or for 2 and 3
print(bitwOr(2,3))
# bitwise or for 2 and 4
print(bitwOr(2,4))
# bitwise or for 2 and 5
print(bitwOr(2,5))
# bitwise or for 78 and 0
print(bitwOr(78,0))
输出
[1] 3
[1] 6
[1] 7
[1] 78
bitwOr也可以在向量上执行
程序
s=c(1,2,3,4,5)
# s and a are the two vectors
a=c(90,91,92,93,94)
# bitwise or operation between
# a and s vector elements
print(bitwOr(a,s))
输出
[1] 91 91 95 93 95
bitwXor
在R语言中,我们可以使用名为bitwXor()的函数来进行位Xor操作。这个函数一次接收两个数据作为输入,并执行以下操作。它将数字转换为二进制值(比特-0和1)。然后,如果两个数据相同,它返回0,否则返回1。
输入值可以是整数或列表/向量。
例子 :
5 - 0101
6 - 0110
bitwXOR(5,6) ---> 0101
^ 0110
---------------
0011 ---> 3
节目
# range of a values
# each value of a with
# respect to b
a=10:20
b=58
for (i in a){
print(bitwXor(i,b))
}
输出
[1] 48
[1] 49
[1] 54
[1] 55
[1] 52
[1] 53
[1] 42
[1] 43
[1] 40
[1] 41
[1] 46
bitwNot
在R语言中,我们可以通过bitwNot()函数找到给定数字的逆运算,即如果0则为1,如果1则为0。这个函数的输入也可以是一个整数、向量、矩阵、列表等。
例子
6- 0110
bitwNot(6) ----> 0110
+ 1
-----------
0111 ---> -7
节目
a=3
b=6
# bitwise on 3
print(bitwNot(a))
# bitwise on 6
print(bitwNot(b))
print("----------------")
# consider values from 1 to 15
# to perform this operation
values=1:15
for (i in values){
print(bitwNot(i))
}
输出
[1] -4
[1] -7
[1] "----------------"
[1] -2
[1] -3
[1] -4
[1] -5
[1] -6
[1] -7
[1] -8
[1] -9
[1] -10
[1] -11
[1] -12
[1] -13
[1] -14
[1] -15
[1] -16
这也可以适用于向量。
程序
# create two vectors a and
# b with elements
a=c(7058,7059,7056)
b=c(34,45,63)
# bitwise on vector a
print(bitwNot(a))
# bitwise on vector b
print(bitwNot(b))
输出
[1] -7059 -7060 -7057
[1] -35 -46 -64
bitwAnd
R语言使用bitwAnd函数来执行逐位和操作。其中输入值可以是整数或列表/向量。
例子
3 - 0011
4 - 0100
bitwAnd(3,4) ----> 0011
& 0100
--------------
0000 ---> 0
节目
# bitwise operator between 4 and 3
print(bitwAnd(4,3))
# bitwise operator between 4 and 7
print(bitwAnd(4,7))
# bitwise operator between 1and 4
print(bitwAnd(1,4))
# bitwise operator between 56 and 8
print(bitwAnd(56,8))
# bitwise operator between 4 and 0
print(bitwAnd(4,0))
输出
[1] 0
[1] 4
[1] 0
[1] 8
[1] 0
位数和也可以在向量上执行。
程序
s=c(1,2,3,4,5)
# s and a are the two vectors
a=c(90,91,92,93,94)
# bitwise And operation between
# a and s vector elements
print(bitwAnd(s,a))
输出
[1] 0 2 0 4 4
bitwShiftL
R语言使用bitwShiftL函数来执行逐位左移操作。该函数的输入是移位值和一个整数/向量/列表
公式 。
N*(2^i)
其中N是给定的数字,i是轮班的数量。
例子
bitwShiftL(1,4) - N=1 and i=4
so, N*(2^i)
1*(2^4)=16
节目
# shift 4 by 1 bit
bitwShiftL(1,4)
# shift 4 by 2 bit
bitwShiftL(2,4)
# shift 4 by 3 bit
bitwShiftL(3,4)
# shift 4 by 4 bit
bitwShiftL(4,4)
# shift 4 by 5 bit
bitwShiftL(5,4)
输出
16
32
48
64
80
bitwShiftR
它将执行右移操作。它将把比特从左到右移位。
公式
N*(2/i)
其中N是给定的数字,i是右移的次数。
例子
bitwShiftR(4,1)
here N=4 and i=1
so 4*(2/1)=8
节目
# shift 1 by 4 bit
bitwShiftR(1,4)
# shift 4 by 2 bit
bitwShiftR(4,2)
# shift 4 by 3 bit
bitwShiftR(3,4)
# shift 16 by 2 bit
bitwShiftR(16,2)
# shift 8 by 2 bit
bitwShiftR(8,2)
输出
0
1
0
4
2