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

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

开发者学堂课程【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)

相关文章
|
算法
基础算法:位运算
基础算法:位运算
53 0
|
1月前
|
算法 C语言
探究位运算中的神奇操作:n&(n-1)
探究位运算中的神奇操作:n&(n-1)
|
3月前
|
算法
算法】位运算——常见位运算基础操作总结
算法】位运算——常见位运算基础操作总结
算法】位运算——常见位运算基础操作总结
|
5月前
|
存储 自然语言处理 算法
位运算入门及简单算法题的应用
位运算入门及简单算法题的应用
45 1
|
6月前
|
算法 C++
c++算法学习笔记 (10) 位运算
c++算法学习笔记 (10) 位运算
|
6月前
八大常见位运算总结(非常经典,建议收藏)
八大常见位运算总结(非常经典,建议收藏)
60 0
|
算法 Java API
【算法】位运算常用算法以及知识点
【算法】位运算常用算法以及知识点
87 0
|
算法 Java 编译器
第 14 天_位运算【算法入门】
第 14 天_位运算【算法入门】
93 0
|
算法
计算两数之和深度理解面向对象
计算两数之和深度理解面向对象
58 0
|
算法
《零基础学算法》(第一讲)位运算的奇技淫巧
《零基础学算法》(第一讲)位运算的奇技淫巧
146 0
下一篇
无影云桌面