本文是对《计算机系统基础》一书中第一章C语言中字面量数据类型认定实验的复现,主要涉及C语言字面量数据类型,gcc编译32位程序两个知识点。重点在于计算机在进行比较时不会先看正负号认定数据类型,而是根据数据绝对值的大小认定。
c语言数值常量的类型
安装gcc
多平台编译工具
1 | pacman -S gcc-multilib |
安装32位程序所需的libc
库
1 | pacman -S lib32-glibc lib32-gcc-libs |
实验代码
1 |
|
实验结果
关键点在于理解计算机先不管符号,根据2127483648
确定类型为unsigned int
,再加上符号,对0x80000000
进行补码转换又得到0x80000000
,由于先前已经确定unsigned int
类型,所以比较时,以2147483648(0x80000000)
和2147483647(0x7fffffff)
比较,满足大于条件,输出false
。
参考下文: