ZHCUAQ1F july 2015 – april 2023
当为向量应用一元运算符(例如负号:-)和二进制运算符(例如 +)时,运算符会应用到向量中的每个元素。也就是说,生成的向量中的每个元素都是将运算符应用于源向量中对应元素的结果。
运算符 | 说明 |
---|---|
- | 取反 |
~ | 按位补码 |
! | 逻辑非(仅限整型向量) |
下面的示例中声明了一个被称为 pos_i4 的 int4 向量,并将它初始化为值 1、2、3 和 4。然后,它使用取反运算符来将另一个 int4 向量 neg_i4 的值初始化为 -1、-2、-3 和 -4。
int4 pos_i4 = (int4)(1, 2, 3, 4);
int4 neg_i4 = -pos_i4;
运算符 | 说明 |
---|---|
+、-、*、/ | 算术运算符(复数向量中也受支持) |
=、+=、-=、*=、/=、 | 赋值运算符 |
% | 取模运算符(仅限整型向量) |
&、|、^、<<、>> | 按位运算符 |
>、>=、==、!=、<=、< | 关系运算符 |
++、-- | 增量/减量运算符(前缀和后缀;仅限整型向量;复数向量的实部中也受支持) |
&&、|| | 逻辑运算符(仅限整型向量) |
当二进制运算符与 TI 向量类型一起使用时,每个操作数向量类型中的元素类型和元素数量必须相同。对于算术二进制运算符(例如 +、-),结果类型与操作数类型相当。
向量二进制逻辑运算符产生的向量类型与带符号整数元素的向量操作数具有相同的元素数量。例如,如果 == 运算符比较两种 float4 类型,则生成的类型将是 int4。比较两个 double8 类型会得到一个 long8 类型。向量二进制逻辑运算符会在每个结果向量通道中产生 -1(表示 true)或 0(表示 false)。
下面的示例在类型为 int4 的向量上使用 =、++ 和 + 运算符。假定 iv4 参数最初包含 (1, 2, 3, 4)。在退出 foo() 时,iv4 将包含 (3, 4, 5, 6)。
void foo(int4 iv4)
{
int4 local_iva = iv4++; /* local_iva = (1, 2, 3, 4) */
int4 local_ivb = iv4++; /* local_ivb = (2, 3, 4, 5) */
int4 local_ivc = local_iva + local_ivb; /* local_ivc = (3, 5, 7, 9) */
}
算术运算符和增量/减量运算符可以与复数向量类型搭配使用。增量/减量运算符会加上或减去 1+0i。
下面的示例中将类型为 cfloat2 的复数向量相乘和相除。如需详细了解复数乘法和除法的规则,请参阅 C99 C 语言规范的“附件 G”。
void foo()
{
cfloat2 va = (cfloat2) (1.0, -2.0, 3.0, -4.0);
cfloat2 vb = (cfloat2) (4.0, -2.0, -4.0, 2.0);
/* vc = (0.0, -10.0), (-4.0, 22.0) */
cfloat2 vc = va * vb;
/* vd = (0.4, -0.3), (-1.0, 0.5) */
cfloat2 vd = va / vb;
...
}
在 C64+ 和 C6740 上,前面示例中的 * 和 / 运算符会调用一个内置函数来执行复数乘法和除法运算。在 C6600 上,编译器会生成一个 CMPYSP 指令来执行复数乘法或除法运算。