0%

计算机系统基础NJU

本文是对《计算机系统基础》一书中第一章C语言中字面量数据类型认定实验的复现,主要涉及C语言字面量数据类型,gcc编译32位程序两个知识点。重点在于计算机在进行比较时不会先看正负号认定数据类型,而是根据数据绝对值的大小认定。

c语言数值常量的类型

安装gcc多平台编译工具

1
pacman -S gcc-multilib    

安装32位程序所需的libc

1
pacman -S lib32-glibc lib32-gcc-libs

实验代码

1
2
3
4
5
6
7
8
9
#include <stdio.h>

int main(){
if(-2147483648>2147483647)
printf("false!!!");
else
printf("true!!!");
return 0;
}

实验结果

关键点在于理解计算机先不管符号,根据2127483648确定类型为unsigned int,再加上符号,对0x80000000进行补码转换又得到0x80000000,由于先前已经确定unsigned int类型,所以比较时,以2147483648(0x80000000)2147483647(0x7fffffff)比较,满足大于条件,输出false

参考下文:

计算机系统基础读书笔记摘要