二进制基础

本文最后更新于:2023年6月29日 晚上

基础

原码:首位表示符号,其余表示数值
反码:正数的反码是本身;负数的反码除符号位之外,其余各位取反
补码:正数的补码就是其本身;负数的补码是在其反码的基础上加 1
有符号数的加减法需要把数转化为补码进行运算,运算结果仍未补码,若要得到原数,需对所得补码的结果再求一次补码

  • 比如 16sd30000+16sd20000=16sb1100_0011_0101_0000(这是补码)=161011_1100_1011_0000(源码)=16sd1553616'sd30000 + 16'sd20000 = 16'sb1100\_0011\_0101\_0000(这是补码)=16'1011\_1100\_1011\_0000(源码)=-16'sd15536

转化

无符号数转有符号数 :

  1. 无符号数最高位如果是 0,有符号数就是等于无符号数本身 (正数取补码是自身)
  2. 无符号数最高位如果是 1,将无符号数取补码得到的就是有符号数
    • 假设两个最高位是 0 的无符号数相加得到了一个最高位是 1 的有符号数,根据有符号数的运算规则,两个数的补码相加得到的仍为补码,因此要求相对的有符号数的原码,就要取补码得到原码

有符号数转无符号数:

  1. 有符号数最高位如果是 0,无符号数就是等于有符号数本身 (正数取补码是自身)
  2. 有符号数最高位如果是 1,将无符号数取补码得到的就是有符号数
    • [[x]]=x[[x]_补]_补=x,因此无符号数通过取补码变成有符号数,有符号数再取补码变成无符号数

二进制基础
https://rufish.top/2023/06/06/二进制基础/
作者
Rufish
发布于
2023年6月6日
许可协议