写点什么

【一 Go 到底】第十天 --- 位运算 and 移位运算符

作者:指剑
  • 2022 年 10 月 10 日
    重庆
  • 本文字数:588 字

    阅读完需:约 2 分钟

【一Go到底】第十天---位运算and移位运算符

一、原码,反码,补码

有符号的二进制数


  1. 进制的最高位是符号位: 用 0 表示正数,用 1 表示负数


 1 ===> 0000 0001-1 ===> 1000 0001
复制代码


  1. 正数的原码,反码,补码都一样



  1. 负数的反码 = 原码符号位不变,其他位取反

  2. 负数的补码 = 负数的反码 + 1| | -1|| --- | --- || 原码 | 1000 0001 || 反码 | 1111 1110 || 补码 | 1111 1111 |

  3. 0 的反码,补码都为 0

  4. 计算机运行时,都是用补码进行运算

二、位运算


案例演示


这里采用 2 和 3 进行运算


正数


2 补码为 0000 0010


3 补码为 0000 0011


负数


-2 补码 1111 1110


-3 补码 1111 1101


package main
import "fmt"
func main() {
// 正数 // 2 补码为 0000 0010 // 3 补码为 0000 0011
// 负数 // -2 补码 1111 1110 // -3 补码 1111 1101
// 按位与 0000 0010 fmt.Println("按位与 ==> ", 2&3) // 2
// 按位或 0000 0011 fmt.Println("按位或 ==> ", 2|3) // 3
// 按位异或 0000 0001 fmt.Println("按位异或 ==>", 2^3) // 1 fmt.Println("按位异或 ==>", 2^-2) // -4
}
复制代码

三、移位运算


案例演示这里采用 1 作为演示


1 用二进制表示为 0000 0001


package main
import "fmt"
func main() {
// 1 二进制表示为 0000 0001 // 定义变量,右移2位 a := 1 >> 2 // 0000 0001 ==> 0000 0000 fmt.Println("a = ", a)
// 定义变量,左移3位 b := 1 << 3 // 0000 0001 ==> 0000 1000 fmt.Println("b = ", b)}
复制代码


发布于: 刚刚阅读数: 4
用户头像

指剑

关注

InfoQ签约作者 2022.07.13 加入

AWS Community Builder,AWS Student Ambassador,阿里云专家博主,OPS社区创始成员

评论

发布
暂无评论
【一Go到底】第十天---位运算and移位运算符_Go_指剑_InfoQ写作社区