2013-03-14 82 views

回答

4

使用格式說明符%d會導致您的無符號整數被解析,就像它被簽名一樣。

變化:

NSLog(@"Index: %d", index); 

到:

NSLog(@"Index: %u", index); 

,它會正確顯示。

或者,只要使用NSInteger,如果您確實不需要無符號值。

+0

爲什麼匿名倒票,我想知道? – 2013-03-14 13:14:27

+0

我覺得因爲你不在這一點。它不應該記錄任何東西,因爲-1小於0.至少這是我讀的。 – nickdnk 2015-07-18 14:23:35

+0

@nickdnk:好的 - 謝謝 - 我現在看到代碼有兩個問題,並不能100%清楚OP所指的問題。 – 2015-07-18 14:46:15

1

問題是'整數'不知道任何有關它的簽名/無符號特徵。這只是一點點。 -1與值0xFFFFFFFF是不變的。

如果它是有符號/無符號的,那麼類型'知道',並且在編譯時正在發出正確的處理器指令。

NSUInteger index = -1; // effectively translates to index = 0xFFFFFFFF; (all bits set) 

if (index > 0) { // unsigned comparison - well, anything else than zero in unsigned comparison is bigger than zero 
    // so probably the JA (jump if above) asm instruction is emitted. 
    // if the index was NSInteger, JG will be emitted. 

    NSLog(@"Index: %d", index); // as others stated, you're now passing the bits of 'index' in way the NSLog treats them as signed integer 

}