现在的位置: 首页 > 综合 > 正文

C语言中负数怎么表示的?

2018年01月10日 ⁄ 综合 ⁄ 共 508字 ⁄ 字号 评论关闭

答案是补码,正数表示取反再加1。

关于原码,反码,补码的详细解释可以参照:原码, 反码, 补码 详解

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 

正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)。

如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.

发现用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在"0"这个特殊的数值上. 虽然人们理解上+0和-0是一样的, 但是0带符号是没有任何意义的. 而且会有[0000 0000]原和[1000 0000]原两个编码表示0.

于是补码的出现, 解决了0的符号以及两个编码的问题,这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128。

因为机器使用补码, 所以对于编程中常用到的32位int类型, 可以表示范围是: [-231, 231-1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.

抱歉!评论已关闭.