ZHCUAU3K January 2018 – March 2025
as_<destination type>(<source type object>) 函数用于将对象的原始类型重新解释为另一种矢量类型。源类型和目标类型的位数必须相同。如果大小不同,则返回错误。
针对不会导致每个元素恰好包含 0x0 或 0x1 的布尔向量,未定义重新解释。下面显示了已定义或未定义结果的示例:
ushort2 myshort2_0 = ushort2(0,1);
bool4 mybool4_0 = as_bool4(myshort2_0); // Defined
ushort2 myshort2_1 = ushort2(2,3);
bool4 mybool4_1 = as_bool4(myshort2_1); // Undefined
bool8 mybool8_0 = bool8(0,1,0,1,0,1,0,1);
float2 myfloat2_0 = as_float2(mybool8_0); // Defined
float2 myfloat2_1 = float2(1.0,2.0);
bool8 mybool8_1 = as_bool8(myfloat2_1); // Undefined虽然算术转换由上一段中介绍的转换函数执行,但重新解释函数不执行算术转换。例如,假设浮点值 1.0 被重新解释为整数值。浮点值 1.0 以十六进制表示为 0x3f800000,由此得到的整数值为 1,065,353,216。
以下示例将 long 类型(64 位)的非矢量变量重新解释为 float2 矢量(2 个元素,每个元素 32 位)。mylong 的最低有效 32 位放在 fltvec2.s0 中,而 mylong 的最高有效 32 位放在 fltvec2.s1 中。不执行算术转换。
extern long mylong;
float2 fltvec2 = as_float2(mylong); 如果源类型和目标类型的大小不同,则会发生错误。
如果启用了矢量数据类型,还可以对标量(非矢量)类型使用 as_<type>() 函数。类型必须具有相同的位数。以下示例将浮点值重新解释为整数值。浮点值 1.0 以十六进制表示为 0x3f800000,由此得到的整数值为 1,065,353,216。
float myfloat = 1.0f;
myint = as_int(myfloat);