C/C++编译后负数在硬盘可执行二进制文件中的存储方式问询
可执行文件中负数的存储方式
编译生成的可执行二进制文件里,有符号负数是以补码形式直接存储在硬盘上的,程序启动加载时只是将这部分二进制数据原样复制到RAM,不会再做编码转换。
具体到你举的例子int number = -25:
- 假设是8位有符号整数(实际环境中int通常为32位,原理一致),-25的补码是
1110 0111。编译器在编译阶段就会把这个补码序列写入可执行文件的对应数据段(比如.data段,若为常量则在.rodata段)。 - 绝对不会存储最高位为1的原码
1001 1001——因为C/C++标准要求有符号整数的存储和运算遵循补码规则,编译器会在编译期完成原码到补码的转换,避免程序运行时再做额外处理,保证运算效率。
程序加载时,操作系统只是把硬盘上的二进制数据映射到进程的内存空间,这部分数据和运行时RAM中存储的格式完全一致,加载后可直接参与运算,无需再转换。
内容的提问来源于stack exchange,提问作者Cosmos
相关产品推荐
相关产品推荐

