静态方法:位运算
SIMD.%type%.and(),SIMD.%type%.or(),SIMD.%type%.xor(),SIMD.%type%.not()
and
方法接受两个 SIMD 值作为参数,返回两者对应的通道进行二进制AND
运算(&
)后得到的新的 SIMD 值。
var a = SIMD.Int32x4(1, 2, 4, 8);
var b = SIMD.Int32x4(5, 5, 5, 5);
SIMD.Int32x4.and(a, b)
// Int32x4[1, 0, 4, 0]
上面代码中,以通道0
为例,1
的二进制形式是0001
,5
的二进制形式是01001
,所以进行AND
运算以后,得到0001
。
or
方法接受两个 SIMD 值作为参数,返回两者对应的通道进行二进制OR
运算(|
)后得到的新的 SIMD 值。
var a = SIMD.Int32x4(1, 2, 4, 8);
var b = SIMD.Int32x4(5, 5, 5, 5);
SIMD.Int32x4.or(a, b)
// Int32x4[5, 7, 5, 13]
xor
方法接受两个 SIMD 值作为参数,返回两者对应的通道进行二进制“异或”运算(^
)后得到的新的 SIMD 值。
var a = SIMD.Int32x4(1, 2, 4, 8);
var b = SIMD.Int32x4(5, 5, 5, 5);
SIMD.Int32x4.xor(a, b)
// Int32x4[4, 7, 1, 13]
not
方法接受一个 SIMD 值作为参数,返回每个通道进行二进制“否”运算(~
)后得到的新的 SIMD 值。
var a = SIMD.Int32x4(1, 2, 4, 8);
SIMD.Int32x4.not(a)
// Int32x4[-2, -3, -5, -9]
上面代码中,1
的否运算之所以得到-2
,是因为在计算机内部,负数采用”2 的补码“这种形式进行表示。也就是说,整数n
的负数形式-n
,是对每一个二进制位取反以后,再加上 1。因此,直接取反就相当于负数形式再减去 1,比如1
的负数形式是-1
,再减去 1,就得到了-2
。