计算机系统基础
听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结果又会怎么样呢
- 编译器如何处理字面量
- 高级语言中运算规则
- 高级语言与指令之间的对应
- 机器指令的执行过程
- 机器级数据的表示和运算
- 当参数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外)时不成立**
- 机器级数据的表示
- 变量的存储空间分配
- 数据的大端小端存储方式
- 连接器的符号解析规则
第一份讲义