位运算深度讲解|学习笔记

简介: 快速学习位运算深度讲解。

开发者学堂课程【GO 语言核心编程-基础语法、数组、切片、Map:位运算深度讲解】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/625/detail/9558


位运算深度讲解

 

内容简介:

一、位运算符和移位运算符

二、补码,反码,原码

三、Golang 中有2个移位运算符

 

一、位运算符和移位运算符

计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary) 数用0和1两个数字及其组合来表示任何数。

进位规则是“逢2进1”,数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。

在计算机的内部,运行各种运算时,都是以二进制的方式来运行。

原码、反码、补码

网上对原码,反码,补码的解释过于复杂,精简6句话:

对于有符号的而言:

1)表示1表示数1===》[0000 0001] -1===>[1000 0001]

2)正数的原码,反码,补码都一样

3)负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)1===>原码[00000001]反码[00000001]补码[00000001] -1==>原码[10000001]反码[11111110]补码[11111111

4)负数的补码它的反码+15)0的反码,补码都是0

5)在计算机运算的时候,都是以补码的方式来运算的1+1 11=1+(-1)

Golang 中有3个位运算.

分别是”按位与&、按位或)、按位异或^它们的运算规则是,

按位与&两位全为1结果为1.否则为0

按位或|两位有一个为1结果为1,否则为0

按位异或^两位一个为0一个为1结果为1,否则为0

案例练习

比如:2&3=? 23=? 2^3=?

//分别是”按位与&、按位或)、按位异或^它们的运算规则是,

按位与&两位全为1结果为1否则为0

按位或|两位有一个为1结果为1,否则为0

按位异或^两位一个为0一个为1结果为1,否则为0

//运算规则,完成案例。针对这个要运用分析说二与三等于多少,或321等于多少,打开一个表,求二与三,首先在计算的时候,都是以补码方式运行的,所以出2的补码,2是一个正数所以它的补码和原码一模一样,马上就能推出结果2的补码为0000 0010,3的补码,是一样的,都是正数3的补码:0000 0011,&只有都为一才为一,所以说2&3的结果0000 0010十进制为2。

package main

import (

"fmt "

func main()

var i int=5

//二进制输出

fmt.Printf("%b \n", i)

//八进制: 0-7,满8进1.以数字0开头表示

var j int.011110//11=>9

fst.Println("j=", j)

//6-9及A-F,满16进1.以 ex 或 ex 开头表示

var k int . 0x11 11 0x11=> 16+ 1 =17

fmt.Println("k=", k)

}

package main

func main() {

假如还有97天放假,问: xx个星期零xx天

var days int = 97

var week int = days 17

vardayint=days%7

fut.Printf( "%d个星期零%d天\n", week, day)

//定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:

1/5/9* (华氏温度-100),请求出华氏温度对应的摄氏温度

var huashi float32 3 134.2

varsheshi float32 3 5.0 , 9*(huashi一100)

fnt.Printf("%v对应的摄氏温度=%v \n", huash1, shesh1)

}

package main import(

"fmt"

func main(){

//位运算的演示

fmt.Println(2&3)// 2

fmt.Println(2|3)// 3

fmt.Println(2^3)// 3

fmt.Println(-2^2) //4

}

 

二、补码,反码,原码

2&3

2的补码00000010

3的补码0000 0011

2&300000010 =>2

2|3=?

2的补码00000010

3的补码0000 0011

2|30000 0011 =>3

2^3

2的补码0000 0010

3的补码00000011

2^30000 0001 =>1

-2^2

-2的原码10000010=》反码11111101=>

补码11111110

11111110

2补码0000010

-2^211111100(码)==》原

11111100=》反码11111011=》原码10000100》//-4

 

三、Golang 中有2个移位运算符

>>、<<右移和左移运算规则:

右移运算符>>:低位溢出符号位不变并用符号位补溢出的高位

左移运算符 <<符号位不变,低位补0

案例演示

a := 1 >> 2//00000001=>=00000000=0

c:=1<<2 //00000001 ==> 00000100 => 4

package main

"fmt"

func main()

//位运算的演示

fmt . Println(2&3) // 2

fmt.Println(213) //3

fmt . Println(23) // 3

fmt.Println(-202) //-4

a:=1>>2//0

c:1<<2//4

fmt.Println

("a=", a,"c", c)

相关文章
|
4天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
5天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1102 152
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1779 9
|
10天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
708 152
|
12天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
664 14
|
7天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
467 5