發布時間:2011-09-16 共3頁
看下面的一段程序:
1 float sum(float a[], unsigned int len)
2 {
3 int i;
4 float r = 0.0;
5 for (i = 0; i <= len - 1; ++i)
6 {
7 r += a[i];
8 }
9 return r;
10 }
如果len為0,那么這段代碼將不會返回0.0。而是段錯誤。
另外,當在無符號數和有符號數之間進行類型轉換時,不同的轉換順序會得到不同的結果。如:
1
2 unsigned x = 0xFFFF;
3 (int) ((word << 24) >> 24);
4 ((int) word << 24) >> 24;
第一個表達式的結果是0xFF,而第二個是0xFFFFFFFF.原因是第一個表達式的右移運算高位補0,而第二個右移運算高位補1.
測試代碼:
1 #include <stdlib.h>
2 #include <stdio.h>
3 float sum(float a[], unsigned int len)
4 {
5 int i;
6 float r = 0.0;
7 for(i = 0; i <= len - 1; ++i)
8 {
9 r += a[i];
10 }
11