深入理解計算機系統 練習題2.25 答案與分析
阿新 • • 發佈:2018-12-10
#include <stdio.h>
#include "stdafx.h"
#include <iostream>
using namespace std;
float sum_elements(float a[], unsigned length) {
int i;
float result = 0;
cout << length << endl;
cout << length - 1 << endl;
for (i = 0; i <= length - 1;i++) {
result += a[i];
}
return result;
}
int main() {
float a[] = {1.1,2,2.3,3.4};
cout << sum_elements(a, 0) << endl;
}
返回結果 可以發現length - 1=4294967295,原因是length的型別是unsigned 但是1的型別是是int,所以計算轉為無符號數計算,length - 1=length +(- 1),現在的問題是-1的無符號數是多少-1的十六進位制無符號數為0xFFFFFFFF換算之後是4294967295,所以程式碼就出現了異常,for迴圈進去之後陣列下標越界。 修改為
#include <stdio.h>
#include "stdafx.h"
#include <iostream>
using namespace std;
float sum_elements(float a[], int length) {
int i;
float result = 0;
cout << length << endl;
cout << length - 1 << endl;
for (i = 0; i <= length - 1;i++) {
result += a[i];
}
return result;
}
int main() {
/*float a[] = {1.1,2,2.3,3.4};
cout << sum_elements(a, 0) << endl;*/
unsigned int a = 50;
unsigned int b = 100;
printf("%u", a - b);
}