2015-05-01 139 views
0

作爲每氖文檔:霓虹燈比較

  • 如果比較爲車道true,則結果在該車道被設置爲一所有 比特。如果比較對於通道是錯誤的,則所有位都被設置爲0的 。返回類型是一個無符號整數類型。

我已經寫了一小段代碼來檢查這一點,我觀察到的結果是0和-1而不是0和1.任何人都可以告訴我背後的原因嗎?

代碼:

float c1[4] = {12.0f,12.0f,12.0f,12.0f}; 
float c2[4] = {13.0f,12.0f,9.0f,12.0f}; 
float32x4_t t1,t2; 
uint32x4_t rq; 
t1 = vld1q_f32(c1); 
t2 = vld1q_f32(c2); 
rq = vceqq_f32(t1,t2); 
printf("start\n"); 
for(int i = 0;i < 4; i++){ 
    printf("%d\n",rq[i]); 
} 
printf("end\n"); 

結果:

start 
0 
-1 
0 
-1 
end 

回答

3

因爲如果他們簽約,因爲你用%d作爲printf格式說明你顯示的值。如果使用%u,則會看到等效的無符號值(0UINT_MAX)。

請注意,在這種情況下,signed-ness並不特別重要 - 您可以將比較結果視爲無符號掩碼(全0或全1)或有符號整數值(0或-1) - 它是相同的底層位模式 - 只要在您使用結果的特定環境中使用任何有意義的東西。

1

在這裏根據霓虹燈文件,它也被稱爲所有位將被設置爲1。

即在於此:

Binary 1111 1111 1111 1111 1111 1111 1111 1111 = Decimal 4294967295

並使用%U代替%d的。你會得到結果爲:

結果: 0 4294967295 0 4294967295

你得到的結果 - 1意味着所有位都被設置爲1。這樣您可以使用其他邏輯操作,如按位和按位或操作。