go语言中点号 go语言中括号

go语言操作符 ^ 和 &^很多语言都是采用 ~ 作为按位取反运算符,Go 里面采用的是 ^。
如果作为二元运算符,^ 表示按位异或 , 即:对应位相同为 0,相异为 1 。
操作符 ^,按位置零,例如:z = x ^ y , 表示如果 y 中的 bit 位为 1 , 则 z 对应 bit 位为 0,否则 z 对应 bit 位等于 x 中相应的 bit 位的值 。
对于有符号的整数来说,是按照补码进行取反操作的(快速计算方法:对数 a 取反 , 结果为 -(a+1) ) , 对于无符号整数来说就是按位取反
计算过程
以3为例3在内存中补码为 0*** 0011
取反1*** 1100
-1操作1*** 1011
除符号位取反1*** 0100 结果为-4
-------------------------------------------
以9为例 9在内存中补码为 0*** 1001
取反1*** 0110
-1操作1*** 0101
除符号位取反1*** 1010 结果为-10
-------------------------------------------
以-5为例 -5在内存中为的补码为 1*** 1011
为什么呢
-5源码1*** 0101
除符号取反1*** 1010
+1操作1*** 1011
-------------------------------------------
那么-5取反怎么算
补码 1***1011取反为 0***0100
因为符号位为0,所以是正数了 , 正数的补码反码源码都是一个,所以是4
===================================
再看-1
-1源码1*** 0001
除符号取反1*** 1110
+1操作1*** 1111
补码 1*** 1111 取反为 0*** 0000
因为符号位为0,所以是正数了,正数的补码反码源码都是一个,所以是0
go语言取反输出的例子看这里
Go语言中的符号“左移运算符()
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0) 。
例:a = a2 将a的二进制位左移2位,右补0,
【go语言中点号 go语言中括号】左移1位后a = a * 2;
若左移时舍弃的高位不包含1,则每左移一位 , 相当于该数乘以2 。
右移运算符()
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃 。
操作数每右移一位 , 相当于该数除以2 。
例如:a = a2 将a的二进制位右移2位,
左补0 or 补1 得看被移数是正还是负 。
Go语言list(列表)2021-11-10
列表是一种非连续的存储容器 , 有多个节点组成,节点通过一些变量记录彼此之间的关系
单链表和双链表就是列表的两种方法 。
原理:A、B、C三个人,B懂A的电话,C懂B的电话只是单方知道号码 , 这样就形成了一个单链表结构 。
如果C把自己的号码给B , B把自己的号码给A,因为是双方都知道对方的号码,这样就形成了一个双链表结构
如果B换号码了,他需要通知AC,把自己的号码删了,这个过程就是列表的删除操作 。
在Go语言中,列表使用 container/list 包来实现 , 内部的实现原理是双链表,列表能够高效地进行任意位置的元素插入和删除操作 。
列表初始化的两种办法
列表没有给出具体的元素类型的限制,所以列表的元素可以是任意类型的,
例如给列表中放入了一个 interface{} 类型的值,取出值后,如果要将 interface{} 转换为其他类型将会发生宕机 。
双链表支持从队列前方或后方插入元素,分别对应的方法是 PushFront 和 PushBack 。
列表插入函数的返回值会提供一个 *list.Element 结构,这个结构记录着列表元素的值以及与其他节点之间的关系等信息,从列表中删除元素时 , 需要用到这个结构进行快速删除 。
遍历完也能看到最后的结果

推荐阅读