原码反码补码
基本介绍
对于有符号的而言:
- 二进制的最高位是符号位:0表示整数,1表示负数
- 正数的原码反码补码是一样的
- 负数的反码=负数的原码,符号位不变,其余为取反(0->1,1->0)
- 负数的补码=负数的反码+1
- 0的反码补码都是0
- 在计算机运算时,都是在以补码的方式运算的
位运算
位运算的基本介绍
- &是按位与,两位都是1时,为1,否则为0
- |是按位或,两位都是0时,为0,否则为1
- ^是按位异或,两边相异为1,相同为0
注意在计算机在运算时,都是使用相关数字的补码来进行运算的,在使用负数时,要重点关注 - ">>"右移符号
对于有符号数,低位溢出,符号位不变,并用符号位来填补高位空缺,可以粗略理解为除以2的几次方,当然不存在小数一说(就是遇到小数,向下取整)
对于无符号数,叫逻辑右移,高位补0, - "<<"左移符号,符号位会改变,整体向左移动,低位补0
几个重点例子
- 2&4
2 0000 0010
4 0000 0100
2&4 0000 0000 =0 - 2|4
2 0000 0010
4 0000 0100
2|4 0000 0110 =6
3.-2^4
-2的原码 1000 0010
-2的反码 1111 1101
-2的补码 1111 1110
4的补码 0000 0100
-2^4的补码 1111 1010
-2^4的反码 1111 1001
-2^4的原码 1000 0110 =-6
代码用例
func main() {
var a int8 = -3
fmt.Println(a << 6)
fmt.Println(1 >> 1)
}
输出结果为:
64
0

1117

被折叠的 条评论
为什么被折叠?



