ZHCUAQ1F july 2015 – april 2023
不能对向量数据类型使用标准类型转换。但是,可通过 convert_<destination type>(<source type>) 函数将一个向量类型对象的元素转换为另一个向量类型对象。每个元素都进行转换,而且源向量类型和目标向量类型必须具有相同的长度。也就是说,4 元素向量只能转换为其他类型的 4 元素向量。
以下示例使用两个串联的 INT 来初始化 short2 向量,以形成 int2 向量:
void foo(int a, int b)
{
short2 svec2 = convert_short2((int2)(a, b));
...
}
如果向量元素存储的数据超出了可以存储在目标类型中的值的范围,默认情况下,该值将被截断。但是,如果将 _sat 修饰符(表示“饱和”)添加到函数名,则目标类型范围之外的值将设置为目标类型的最大值(或范围之外负值的最小值)。将整数向量转换为浮点向量时,_sat 修饰符无法使用。在下面的示例中,myint4 元素中存储的大于 32,767 的任何值在 myshort4 的相应元素中都设置为 32,767。
int4 myint4;
short4 myshort4 = convert_short4_sat( myint4 );
同样,在浮点和整数向量之间转换时,可以向函数名添加以下任一修饰符,以指定浮点值的四舍五入规则:
从整型转换为浮点型时,不需要四舍五入。从较大的双精度浮点值转换为较小的单精度浮点值则需要四舍五入。双精度到单精度转换的默认舍入方法是 _rte。
下面的示例将存储在 float4 中的数据转换为 int4。它使用 _rtp 修饰符,因此值向上舍入到正无穷大:
float4 myfloat4;
int4 myint4 = convert_int4_rtp( myfloat4 );
_sat 修饰符可以与舍入修饰符组合使用。以下示例将浮点值舍入为偶数,并将大于最大可能短整型值的值设置为最大值:
float4 myfloat4;
int4 myshort4 = convert_short4_sat_rte( myfloat4 );
如果启用了向量数据类型,还可以对标量(非向量)类型(如 short 和 int)使用 convert_<type>() 函数。结果与转换源类型的类型相同。不允许在标量类型和向量类型之间进行转换,因为源类型和目标类型必须包含相同数量的元素。
convert_<destination type>() 函数不可用于复数向量类型。