C语言中负数怎么表示的?
2014-11-27 09:27
218 查看
答案是补码,正数表示取反再加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] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.
关于原码,反码,补码的详细解释可以参照:原码, 反码, 补码 详解
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值.
正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)。
如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.
发现用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在"0"这个特殊的数值上. 虽然人们理解上+0和-0是一样的, 但是0带符号是没有任何意义的. 而且会有[0000 0000]原和[1000 0000]原两个编码表示0.
于是补码的出现, 解决了0的符号以及两个编码的问题,这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128。
因为机器使用补码, 所以对于编程中常用到的32位int类型, 可以表示范围是: [-231, 231-1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.
相关文章推荐
- c语言二维数组怎么表示
- c语言中怎么表示多次方?
- 在C语言中10的N次方怎么表示
- C语言种根号怎么表示 比如(1-x)的二分之一次方
- 负数的二进制怎么表示?
- 在C语言 %d/n 和/n%d 分别怎么表示什么啊
- C语言中八进制和十六进制怎么表示以及原码、反码、补码、C语言按位取反运算符~
- C语言中的负数是如何表示的?
- C语言中八进制和16进制怎么表示,原码,反码及补码,C语言按位取反运算符~
- C语言中常量的存储及表示方式
- 【c语言】将正数变成相应的负数,将负数变成相应的正数
- C语言中,我想在一个函数里用另一个函数的变量怎么办?
- C语言:浮点数在内存中的表示
- 不要在纠结负数的表示了
- 输入一个整数,输出该数二进制表示中1的个数(其中负数用补码表示)--《剑指offer》
- C语言中负数除法与右移取整问题
- c语言:统计整数二进制表示中1的个数(汉明重量)
- 编码:隐匿在计算机软硬件背后的语言(5)--负数的表示
- C语言要怎么学啊
- 原码、反码、补码,计算机中负数的表示