原码、反码、补码

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

二进制是逢 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的时候不是用补码,而是用原码,其他运算不都是补码吗?前面也讲到计算机的运算其实是补码运算!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值