原码、反码、补码

一、二进制在运算中的说明

二进制是逢 2 进位的进位制,0、1 是基本算符。

现代的电子计算机技术全部采用的是二进制,因为它只使用 0、1 两个数字符号,非常简单方便,

易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用 0

和 1 两个数字及其组合来表示任何数。进位规则是“逢 2 进 1”,数字 1 在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。

二、原码、反码、补码

对于有符号的而言

二进制的最高位是符号位:0表示正数,1表示负数

1 =>   [0000 0001]

-1=>   [1000 0001]

正数的原码、反码、补码都一样

负数的反码 = 它的原码符号位不变,其他取反(0->1 , 1->0)

负数的补码 = 它的反码+1

 1 ==> 原码 [0000 0001]   反码[0000 0001]   补码[0000 0001]

-1 ==> 原码 [1000 0001]   反码[1111 1110]   补码[1111 1111]

0的反码,补码都是0

在计算机运算的时候,都是以补码的方式来计算的

1+1   1-1 = 1+(-1)

三、位运算符

Golang 中有 3 个位运算

  1. 按位与&
  2. 按位或|
  3. 按位异或^

分别是”按位与&、按位或|、按位异或^,它们的运算规则是:

按位与& : 两位全为1,结果为 1,否则为 0

按位或| : 两位有一个为 1,结果为 1,否则为 0

按位异或 ^ : 两位一个为 0,一个为 1,结果为 1,否则为 0

案例:

package main
import "fmt"
func main(){
    fmt.Println(2&3)//2
    fmt.Println(2|3)//3
    fmt.Println(2^3)//1
    fmt.Println(-2^3)//4
}

//2&3
//2的补码 0000 0010
//3的补码 0000 0011
//2&3     0000 0010 =>2
//2|3     0000 0011 =>3
//2^3     0000 0001 =>1

//-2^2
//-2的原码 1000 0010
//-2的反码 1111 1101
//-2的补码 1111 1110

//2 的补码  0000 0010

//-2^2
//-2的补码 1111 1110
//2 的补码 0000 0010
//-2^2     1111 1100 (补码)
//-2^2     1111 1011 (反码)
//-2^2     1000 0100  (原码) => 4

为什么-2^2的时候不是用补码,而是用原码,其他运算不都是补码吗?前面也讲到计算机的运算其实是补码运算!

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!