計算機系統基礎
聽mooc南京大學袁春風老師的講課筆記
- ISO C90標準下,在32位系統上
如下C表達式的結果是什麼?
-2147483648 < 2147483647
false(與事實不符)!Why?
如下關係表達式結果呢?
int i = -2147483648;
i < 2147483647
true!Why?
-2147483647-1 < 2147483647,結果怎樣?
#include<stdio.h>
int main()
{
if(-2147483648 < 2147483647)
printf("false\n");
else
{
printf("true\n");
}
return 0;
}
若是將表達式換成-2147483647-1 < 2147483647
結果又會怎麼樣呢
3d
- 編譯器如何處理字面量
- 高級語言中運算規則
- 高級語言與指令之間的對應
- 機器指令的執行過程
- 機器級數據的表示和運算
- 當參數len爲0時,返回值應該是
0,可是在機器上執行時,卻發
生訪存異常。但當len爲int型時
則正常。Why?
訪問違例地址爲什麼是0xC0000005?
sum(int a[ ], unsigned/*int*/ len)
{
int i,sum = 0;
for (i = 0; i <= len–1; i++)
sum += a[i];
return sum;
}
#include<stdio.h>
int sums(int a[],unsigned len)
{
int i,sum=0;
for(i=0;i<=len-1;i++)
{
sum+=a[i];
}
return sum;
}
int main()
{
int a[2]={0,1};
printf("%d\n",sums(a,0));
return 0;
}
- 高級語言中的運算規則
- 機器指令的含義和執行
- 計算機內部的運算電路
- 異常的檢測和處理
- 虛擬地址空間
···
- **若x和y爲int型, 當x=65535時, y=x*x; y的值爲多少?
y=-131071。Why?
現實世界中,x2≥0,但在計算機世界並不必定成立。
對於任何int型變量x和y,(x>y) == (-x<-y) 總成立嗎?
當x=-2147483648,y任意(除-2147483648外)時不成立**
- 機器級數據的表示
- 機器指令的執行
- 計算機內部的運算電路
- **若x和y爲int型, 當x=65535時, y=x*x; y的值爲多少?
y=-131071。Why?
現實世界中,x2≥0,但在計算機世界並不必定成立。
對於任何int型變量x和y,(x>y) == (-x<-y) 總成立嗎?
當x=-2147483648,y任意(除-2147483648外)時不成立**
- 機器級數據的表示
- 變量的存儲空間分配
- 數據的大端小端存儲方式
- 鏈接器的符號解析規則
第一份講義