0%

C语言 源码、反码和补码

C语言的原码、反码和补码

经典著作《C和指针》说过,对于C语言而言,只有四种类型:

  1. 整形
  2. 浮点型
  3. 指针型
  4. 聚合型(比如数组、结构体等)

有人就说了,明显的有char类型吗,不过你可以看看char的范围,就能理解这个char是一个微型的正数,范围在-128~127或者0-255之间,为什么会是两个范围呢,仔细想想signedunsigned的区别。

建议阅读这个经典著作,对指针的理解会上升一个层次

其中整数在计算机内部基本使用补码来表示,这里就说下原码、反码和补码。

先抛出他们的定义:

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

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

  • 补码:正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1(也可以认为是在反码的基础上+1)

举个例子说明一下:

类别 正数 负数 备注(十进制)
原码 0b00011011 0b10011011 27/-27
反码 0b00011011 0b11100100 27/-100
补码 0b00011011 0b11100101 27/-101
对于计算机而言,能理解的只有二进制,也就是电路里面的高低或者叫开关。
处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道