美文网首页
golang位移运算

golang位移运算

作者: n_xy | 来源:发表于2021-03-29 14:09 被阅读0次

之前是写java的,没有无符号有符号之分,最近刷题碰到了位运算的题,就想把这个搞清楚一点。

整数类型

类型 范围
int8 -128到127
uint8 0到255
int16 -32768到32767
uint16 0到65535
int32 -2147483648到2147483647
uint32 0到4294967295
int64 -9223372036854775808到9223372036854775807
uint64 0到18446744073709551615

另外常用的int类型是有符号数,位长取决于你的电脑的位长,电脑是64位的int就是64位的。

位移运算符

左移 <<
右移>>

规则

首先无符号数没啥好说的,不管左移还是右移都是补0

有符号数,以int为例(64位)
老样子,机器内存的是补码
以7fffffffffffffffff为例

a := 0x7fffffffffffffff
fmt.Printf("%x",a)
//out :7fffffffffffffff
b=-0x7fffffffffffffff
fmt.Printf("%x",b)
//out:-7fffffffffffffff
c := 0xffffffffffffffff
fmt.Printf("%x",a)
//err :超出范围

a =a<<1
fmt.Printf("%x",a)
//out:-2

a = a>>1
//out -1
a= a>>100
//out -1

从前三个输出看,没有办法直接给int赋最大值(16进制),全f的话会报错,也就是不能直接赋值符号位,
但是第四个输出来看,这里的运算是逻辑位移,输出-2(ffffffffffffffe,找了半天也没找到怎样输出正儿八经的16进制数),也就是位移包括符号位.
之后再右移多少位都是-1(ffffff...f),就是补码位移规则

综上:

  1. int类型 赋值要标明符号
  2. 位移运算符号位参加,按照补码运算规则(左移补0,右移补符号位

。。。。好乱

相关文章

  • golang位移运算

    之前是写java的,没有无符号有符号之分,最近刷题碰到了位运算的题,就想把这个搞清楚一点。 整数类型 类型范围in...

  • Java中的位移运算

    在Java中,位移运算属于基本运算,符号是<<和>>,即向左位移和向右位移。在Java中只有整数才能位移,所以其他...

  • 【轻知识】bitmask,想想应用场景,php中的一个例子

    位运算bitmask 今天讲golang 中 const的时候提到了位移。但是没讲清楚。所以故有此文。 举个例子p...

  • 位移运算

    位移运算 无符号位移 >>> 无符号右移,无符号位运算用 0 补位 <<< 无符号左移 带符号位移 >> 带符号...

  • 位移运算

    /*======================================================*...

  • 开发基础随笔之位运算符(Bitwise Operators)

    位运算符,属于算术运算符 按位逻辑运算符: 位移运算符: 位运算符的运算数只能是整数 位移运算符:按位左移 a<<...

  • 运算符

    位移位运算 如 UIViewAutoresizingFlexibleHeight = 1 << 4, 1.左移运算...

  • java 三种运算符理解

    >> : 右移运算符;低位移出,符号位不变 << : 左移运算符;高位移出,符号位不变 >>> : 无符号右移; ...

  • 位运算

    运算符含义&按位与|按位或^按位异或~取反<<左位移>>右位移 按位与运算符(&)按位与运算将两个运算分量的对应位...

  • java位运算

    位运算符主要有3个:有符号右位移>>,有符号左位移<<,无符号右位移>>>,位运算的操作的对象是二进制的位,通过位...

网友评论

      本文标题:golang位移运算

      本文链接:https://www.haomeiwen.com/subject/wvhbhltx.html