计算机系统基础

计算机系统基础

听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
结果又会怎么样呢

  1. 编译器如何处理字面量
  2. 高级语言中运算规则
  3. 高级语言与指令之间的对应
  4. 机器指令的执行过程
  5. 机器级数据的表示和运算
  • 当参数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;
}
  1. 高级语言中的运算规则
  2. 机器指令的含义和执行
  3. 计算机内部的运算电路
  4. 异常的检测和处理
  5. 虚拟地址空间
    ···
  • **若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外)时不成立**
  1. 机器级数据的表示
  2. 机器指令的执行
  3. 计算机内部的运算电路
  • **若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外)时不成立**

  1. 机器级数据的表示
  2. 变量的存储空间分配
  3. 数据的大端小端存储方式
  4. 连接器的符号解析规则

    第一份讲义

猜你喜欢

转载自www.cnblogs.com/congrifan/p/11299425.html
今日推荐