位运算深度了解

/*位运算
位运算的思考题
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(左移两位)

完成前面的案例!


 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值