Keep Learning

伪程序员记录点滴

深入理解计算机系统-笔记 Ch2

计算机的表示法是用有限数量的位来完成对一个数字的编码,因此当结果太大时,将会溢出(overflow),整数运算具有结合性但是浮点数的运算是不可结合的。附录中有演示了书中提到的溢出和浮点数结合的c源代码。

gcc编译选项指定c语言的版本:

c版本 GCC命令行选项
GNU89 无, -std=gnu89
ANSI, ISO C90 -ansi, -std=c89
ISO C99 -std=c99
GNU 99 -std=gnu99

信息存储

附录

c代码

overflow溢出代码 (overflow.c) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include   <stdlib.h>
#include <stdio.h>
int main ( int argc, char *argv[] )
{
    float a, c;
    int b;
    b = 200 * 300 * 400 * 500;
    a = (3.14 + 1e20) - 1e20;
    printf ( "the b is %d\n", b );
    printf ( "the a is %f\n", a );
    c = 3.14 + (1e20 - 1e20);
    printf ( "the c is %f\n", c );
    return EXIT_SUCCESS;
}              /* ----------  end of function main  ---------- */

perl代码

perl 10进制转16进制脚本 (d2h) download
1
2
3
4
#!/usr/bin/perl
for ($i = 0; $i < @ARGV; $i++) {
    printf("%d\t = 0x%x\n", $ARGV[$i], $ARGV[$i]);
}
perl 16进制转10进制脚本 (h2d) download
1
2
3
4
5
#!/usr/bin/perl
for ($i = 0; $i < @ARGV; $i++) {
    $val = hex($ARGV[$i]);
    printf("0x%x\t = %d\n", $val, $val);
}

Comments