X86 内部_mm_loadu_si128返回的负值
这是我目前的代码:X86 内部_mm_loadu_si128返回的负值,x86,sse,intrinsics,X86,Sse,Intrinsics,这是我目前的代码: void main() { unsigned char *test = (unsigned char*)malloc(sizeof(unsigned char)* 16); test[0] = 100; test[1] = 128; test[2] = 255; test[3] = 156; test[4] = 190; test[5] = 200; test[6] = 230; test
void main()
{
unsigned char *test = (unsigned char*)malloc(sizeof(unsigned char)* 16);
test[0] = 100;
test[1] = 128;
test[2] = 255;
test[3] = 156;
test[4] = 190;
test[5] = 200;
test[6] = 230;
test[7] = 250;
test[8] = 200;
test[9] = 100;
test[10] = 100;
test[11] = 127;
test[12] = 150;
test[13] = 170;
test[14] = 190;
test[15] = 200;
//__m256i sa = _mm256_setzero_si256();
__m128i sa2 = _mm_setzero_si128();
sa2 = _mm_loadu_si128((__m128i*)&test[0]);
for (int i = 0; i < 16; i++)
{
printf("%d\n", sa2.m128i_i8[i]);
}
}
void main()
{
无符号字符*测试=(无符号字符*)malloc(sizeof(无符号字符)*16);
试验[0]=100;
试验[1]=128;
试验[2]=255;
试验[3]=156;
试验[4]=190;
试验[5]=200;
试验[6]=230;
试验[7]=250;
试验[8]=200;
试验[9]=100;
试验[10]=100;
试验[11]=127;
试验[12]=150;
试验[13]=170;
试验[14]=190;
试验[15]=200;
//__m256i sa=_mm256_setzero_si256();
__m128i sa2=_mm_setzero_si128();
sa2=_mm_loadu_si128((_m128i*)和测试[0]);
对于(int i=0;i<16;i++)
{
printf(“%d\n”,sa2.m128i_i8[i]);
}
}
我正在尝试测试一些SSE内在函数。我使用了
\uuum\u loadu\u si128()
加载类型为无符号字符
的数组预期的结果是 {100128,…,190200} 然而,我得到了结果 {100、-128、-1、-100、-66、-56、-26、-6、-56、-86、-66、-56} 最终结果值的二进制值与我预期结果的值相同。
我想知道为什么
\u mm\u loadu\u si128加载负值
请帮帮我 把它们打印成printf(“%u\n”,(unsigned char)sa2.m128i_i8[i]),怎么样代码>。还让人惊讶的是,你居然能将值300放入一个无符号字符中
哦!我没有修改代码。。。。我检查了printf(“%u\n”,(无符号字符)sa2.m128i_i8[I])。但数组的实际值并没有改变,不是吗?还应该指出,如果您使用的是MSVC,那么我可能会这样做printf(“%hhu\n”,sa2.m128i_i8[I])代码>谢谢您的回答!:)但我希望正确的值加载在_m128i sa2。不只是打印正确的值:(是什么让你认为sa2
的值是错误的?它的值是正确的,你只是不正确地使用了printf
。m128i_i8
是有符号的8位值,printf
在打印之前将它们提升为有符号整数。另一种方法是使用m128i_u8
将它们视为无符号的8位值。