位运算符、移位运算符之运算原理(基于Golang)

 

1、运算规则如下

位运算符
    1)按位与&:两个同时是1,则结果为1,否则为0
    2)按位与|:两个只要有一个是1,则结果为1,否则为0
    3)按位异或^:两个一个为1,一个为0,则结果为1,否则为0

移位运算符
    1)>>右移运算符:低位溢出,符号位不变,并用符号位补齐溢出高度
    2)<<左移运算符:符号位不变,低位补0

2、案例解析如下 

package main

import (
	"fmt"
)

func main() {
	//golang 三个位运算 运算规则如下
	//&(按位与) 两位全为1 结果为1 否则为0
	//|(按位或)	两位其中一个为1 结果为1 否则为0
	//^(按位异或) 两位一个为0 一个为1 结果为1 否则为0

	//2&3=2
	//计算机所有的运算都是以补码在运行
	/*
		2的补码	0000 0010
		3的补码 	0000 0011
		结果	&	0000 0010   ====符号位0代表整数 正数原码、反码、补码都一致 =2
	*/
	fmt.Println(2 & 3)

	//2|3=3
	/*
		2的补码	0000 0010
		3的补码 	0000 0011
		结果	|	0000 0011   ====符号位0代表整数 正数原码、反码、补码都一致 =3
	*/
	fmt.Println(2 | 3)

	//2^3=1
	/*
		2的补码	0000 0010
		3的补码 	0000 0011
		结果	^	0000 0001   ====符号位0代表整数 正数原码、反码、补码都一致 =1
	*/
	fmt.Println(2 ^ 3)

	//-2^2=-4
	/*
			-2	1000 0010[原码]
				1111 1101[反码]
				1111 1110[补码]
			2	0000 0010[补码]
		结果 ^   1111 1100[补码]->1111 1011[反码]->1000 0100[原码]=-4
	*/
	fmt.Println(-2 ^ 2)

	//移位运算符
	//>>、<<右移和左移,运算规则
	//>> 右移运算符:低位溢出,符号位不变,并用符号位补溢出的高度
	//<< 左移运算符:符合位不变,低位补0

	//a:=1>>2 =0
	/*
		1 0000 0001 >>2 = 0000 0000 =0 (1溢出(丢掉),用符号位0补齐溢出高度)
	*/
	fmt.Println(1 >> 2)
	//b:=1<<2 =4
	/*
		1 0000 0001 <<2 = 0000 0100 =4 (1左移两位) 0补齐
	*/
	fmt.Println(1 << 2)
}

以上就是本人在golang语言下实现的位运算符以及移位运算符的案例解析,如有问题,欢迎各位大神指导交流~感谢

你可能感兴趣的:(计算机基础,Golang,位运算符,移位运算符,Golang,二进制,十进制)