/*位运算
位运算的思考题
1)请看下面的代码段,回答a,b,c,d结果是多少?
func main(){
var a int = 1>>2
var b int =-1>>2
var c int =1<<2
var d int =-1 <<2
//a,b,c,d,结果是多少
fmt.Println(“a=”,a)
fmt.Println(“b=”,a)
fmt.Println(“c=”,a)
fmt.Println(“d=”,a)
位运算
位运算的思考题
2)请回答在Golang中,下面的表达式运算的结果是;
func main(){
fmt.Println(2&3)
fmt.Println(2|3)
fmt.Println(13&7)
fmt.Println(5|4)
fmt.Println(-3^3)
}
二进制再运算中的说明
二进制时逢2进位的进位制,0、1是基本算符。
现代的电子计算机技术全部采用的是二进制,因为它只是用0、1两个数字符号,非常简单
方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制
(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是“逢2进1”,数字1在不同
的位上代表不同的值,按从右至左的次序,这个值以二倍递增。
在计算机的内部,运行各种运算时,都是以二进制的方式来运行。
原码、反码、补码
网上对原码,反码,补码的解释过于复杂,我这里简单几句话;
对于有符号的而言;
1)二进制的最高位是符号位;0表示整数,1表示负数
1===> [0000 00001] -1===>[1000 0001] (首位代表符号位)
2)正数的原码,反码,补码都一样
3)负数的反码=他的原码符号位不变,其它位取反(0->1,1->0)
1===>原码[0000 0001]反码【0000 0001】补码【0000 0001】
-1===>原码【1000 0001】反码【1111 1110】补码【1111 1111】
4)负数的补码=他的反码+1
5)0的 反码,补码都是0
6)在计算机运算的时候,都是以补码的方式来运算的。
Golang中有3个位运算
分别是"按位与&、按位或|、按位异或^,它们的运算规则是;
按位与& : 两位全为1,结果为1,否则为0
按位或| : 两位有一个为1,结果为1,否则为0
按位异或^: 两位一个为0,一个为1,结果为1,否则为0
案例练习
比如:2&3=? 2|3=? 2^3=? -2^2
2&3=?
2的补码 0000 0010
3的补码 0000 0011
2&3 0000 0010=>2
两位全为1,结果为1,否则为0
2|3=?
2的补码 0000 0010
3的补码 0000 0011=3
2|3=? 0000 0011=3
两位有一个为1,结果为1,否则为0
2^3=?
2的补码 0000 0010
3的补码 0000 0011
2^3=? 0000 0001=1
-2^2
-2的原码 1000 0010=>反码1111 1101==>补码 1111 1110
1111 1110
2的补码0000 0010
-2^2 1111 1100(补码)==>原码
1111 1100==>反码1111 1011==>原码1000 0100==>-4
Golang中有2个以为运算符;
>>、<<右移和做一,运算规则;
右移运算符>>;低位溢出,符号位不变,并用符号位补溢出的高位
左移运算符>>;符号位不变,低位补0
a:= 1>>2 //0000 0001=0000 0000=0(右移两位)
c:=1<<2 //0000 0001=0000 0100=4(左移两位)
完成前面的案例!
*/