一次開發(fā)過程中竟遇到用 MAX函數(shù)比較 0 和 -1 時返回的是較小的值 -1
簡直逆天了。
使用場景大概如下:
NSArray *array = [NSArray array];
NSInteger result = MAX(array.count - 1,0);
結果 result 竟然是 -1
經(jīng)分析發(fā)現(xiàn) NSArray 的 count 屬性是 NSUInteger 類型棕兼,而對 NSUInteger 類型的變量賦值 -1 會導致溢出實際值則是一個很大的正數(shù)哨查。因此 MAX 函數(shù)把較大的數(shù)值 NSUInteger 型的 -1 返回出來了江掩。
所以在我們使用 MAX 函數(shù)取較大數(shù)值時一定注意參數(shù)類型是否為 NSUInteger 如果有必須轉為有符號類型。如
NSInteger result = MAX((NSInteger)(array.count - 1),0);