2011-08-01 20 views
2

我使用下面的命令嘗試:我的int有什麼問題?

__m128i b = _mm_set_epi32 (y, y, x, x); 

其中Y和X是整數。

當我運行調試我看到b爲類型:無符號__int64 [2]

我打算b可能是每32位(我認爲這是他們在這裏所說的4個整數: http://msdn.microsoft.com/en-us/library/019beekt.aspx

你知道我的代碼是幹什麼的嗎?

感謝

+0

什麼郎?請正確標記 – JonH

+0

您使用哪種語言?請使用標籤並在您的問題中說 – Mark

+1

'_mm_set_epi32'是無關緊要的。 'b'的類型是'__m128i'被鍵入的內容。無論'_mm_set_epi32'確實不能改變'b'的類型,所以如果'b'的類型不符合你的期望,不要看'_mm_set_epi32'。 – delnan

回答

3

我看不出這裏有一個問題 - 一個128位的整數由兩個64位整數,這是上證所以外最大的原生型代表註冊了一個64位的Intel CPU可以處理。

您的調試器可能會顯示「真實」類型,而不是typedefed或宏的類型。

+1

我明白了。謝謝! –

+1

如果'__m128i'是數組類型的typedef名稱,則上述代碼將不會編譯,因爲數組不可分配/可複製初始化。 '__m128i'可能不是一個typedef名稱,而是一些內在的實現特定類型,它代表32位整數的四倍,並且恰好在調試器中顯示爲'unsigned __int64 [2]'。它只是一個調試器的bug特性,與'__m128i'的真實性質沒有多大關係。 – AnT

0

Typedefs是別名,可能性很大,您的調試器向您顯示的值__m128i是別名。在C中,定義新類型的唯一方法是通過struct關鍵字;所有其他技術(typedef等)都會導致類型別名,這些別名可以用它們的等價物替換。

假設這是真的,除了顯示的方式與預期不同之外,還有其他問題嗎?