静态方法:位运算

SIMD.%type%.and(),SIMD.%type%.or(),SIMD.%type%.xor(),SIMD.%type%.not()

and方法接受两个 SIMD 值作为参数,返回两者对应的通道进行二进制AND运算(&)后得到的新的 SIMD 值。

  1. var a = SIMD.Int32x4(1, 2, 4, 8);
  2. var b = SIMD.Int32x4(5, 5, 5, 5);
  3. SIMD.Int32x4.and(a, b)
  4. // Int32x4[1, 0, 4, 0]

上面代码中,以通道0为例,1的二进制形式是00015的二进制形式是01001,所以进行AND运算以后,得到0001

or方法接受两个 SIMD 值作为参数,返回两者对应的通道进行二进制OR运算(|)后得到的新的 SIMD 值。

  1. var a = SIMD.Int32x4(1, 2, 4, 8);
  2. var b = SIMD.Int32x4(5, 5, 5, 5);
  3. SIMD.Int32x4.or(a, b)
  4. // Int32x4[5, 7, 5, 13]

xor方法接受两个 SIMD 值作为参数,返回两者对应的通道进行二进制“异或”运算(^)后得到的新的 SIMD 值。

  1. var a = SIMD.Int32x4(1, 2, 4, 8);
  2. var b = SIMD.Int32x4(5, 5, 5, 5);
  3. SIMD.Int32x4.xor(a, b)
  4. // Int32x4[4, 7, 1, 13]

not方法接受一个 SIMD 值作为参数,返回每个通道进行二进制“否”运算(~)后得到的新的 SIMD 值。

  1. var a = SIMD.Int32x4(1, 2, 4, 8);
  2. SIMD.Int32x4.not(a)
  3. // Int32x4[-2, -3, -5, -9]

上面代码中,1的否运算之所以得到-2,是因为在计算机内部,负数采用”2 的补码“这种形式进行表示。也就是说,整数n的负数形式-n,是对每一个二进制位取反以后,再加上 1。因此,直接取反就相当于负数形式再减去 1,比如1的负数形式是-1,再减去 1,就得到了-2