位运算
StevenQin · · 1516 次点击 · · 开始浏览- 位运算思考题
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=", b)
fmt.Println("c=", c)
fmt.Println("d=", d)
}
func main() {
fmt.Println(2&3) //位与
fmt.Println(2|3) //位或
fmt.Println(13&7)
fmt.Println(5|4) //?
fmt.Println(-3^3) //?//位异或
}
原码、反码、补码
对于有符号的数而言:
1、二进制的最高位是符号位:0表示正数,1表示负数;
示例
1和-1的byte(8位)类型在内存中表示为:1 ==> [0000 0001] -1 ==> [1000 0001]
2、正数的原码,反码,补码都一样;
3、负数的反码 = 它的原码符号位不变,其它位取反(0->1 1->0)
4、负数的补码 = 反码 + 1
1 ==> 原码 [0000 0001] 反码 [0000 0001] 补码 [0000 0001]
-1 ==> 原码 [1000 0001] 反码 [1111 1110] 补码 [1111 1111]
5、0的反码,补码都是0
6、在计算机运算的时候,都是以补码的方式运算的
只有
+没有-
1-1 = 1 + (-1)
位运算符和移位运算符
- Golang 中有3 个位运算
分别是按位与&、按位或|、按位异或^,它们的运算规则是:
按位与&: 两位全为1,结果为1,否则为0
按位或|: 两位有一个为1,结果为1,否则为0
按位异或^: 两位一个为0,一个为1,结果为1,否则为0
- 案例练习
比如:2&3=? 2|3=? 2^3=?
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
- 位运算思考题
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=", b)
fmt.Println("c=", c)
fmt.Println("d=", d)
}
func main() {
fmt.Println(2&3) //位与
fmt.Println(2|3) //位或
fmt.Println(13&7)
fmt.Println(5|4) //?
fmt.Println(-3^3) //?//位异或
}
原码、反码、补码
对于有符号的数而言:
1、二进制的最高位是符号位:0表示正数,1表示负数;
示例
1和-1的byte(8位)类型在内存中表示为:1 ==> [0000 0001] -1 ==> [1000 0001]
2、正数的原码,反码,补码都一样;
3、负数的反码 = 它的原码符号位不变,其它位取反(0->1 1->0)
4、负数的补码 = 反码 + 1
1 ==> 原码 [0000 0001] 反码 [0000 0001] 补码 [0000 0001]
-1 ==> 原码 [1000 0001] 反码 [1111 1110] 补码 [1111 1111]
5、0的反码,补码都是0
6、在计算机运算的时候,都是以补码的方式运算的
只有
+没有-
1-1 = 1 + (-1)
位运算符和移位运算符
- Golang 中有3 个位运算
分别是按位与&、按位或|、按位异或^,它们的运算规则是:
按位与&: 两位全为1,结果为1,否则为0
按位或|: 两位有一个为1,结果为1,否则为0
按位异或^: 两位一个为0,一个为1,结果为1,否则为0
- 案例练习
比如:2&3=? 2|3=? 2^3=?