golang位移运算

Python013

golang位移运算,第1张

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

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

左移 <<

右移>>

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

有符号数,以int为例(64位)

老样子,机器内存的是补码

以7fffffffffffffffff为例

从前三个输出看,没有办法直接给int赋最大值(16进制),全f的话会报错,也就是不能直接赋值符号位,

但是第四个输出来看,这里的运算是逻辑位移,输出-2(ffffffffffffffe,找了半天也没找到怎样输出正儿八经的16进制数),也就是位移包括符号位.

之后再右移多少位都是-1(ffffff...f),就是补码位移规则

综上:

。。。。好乱

C语言中变量的声明/定义格式如下:存储类型类型修饰符数据类型变量名存储类型:用来指明变量的存储位置,即运行该变量在哪一段分配内存空间,常见的存储位置有auto、extern、register、static,在一段执行程序中,可以为变量分配存储空间的有BSS、数据区、栈区、堆区。类型修饰符:用来修饰变量的存储和表现方式。包括long、short、signed、unsigned、void、const、volatile等。数据类型:用来指明该变量的存储大小,即一个该类型的变量要占用多少内存空间。基本数据类型有(char、int、float、指针类型)和由基本数据类型组成的用户自定义类型(struct、enum、typedef、union)