正数的原码反码补码都相同。 -------> 0000 0001 正数1
负数较正数:最高位用1表示,反码其他位取反原码,补码为反码加1-------> 1000 0001 (原码-1) 1111 1110(反码-1) 1111 1111(补码-1)
按位与& 同真为真(1)
按位或 | 一真为真(1)
按位异或 ^ 一真一假为真(1) ,否则为假(0)
注意:位运算操作时都按照补码进行计算,正数三码合一,直接计算结果就是值
负数运算时,必须先把原码转换为反码到补码,在计算其补码值,得到的值为负数则需反向转化为反码至原码,为正数则是实际结果
案例:-2&-5 -2|-5 -2^-5
-2原码:1000 0010 --->反码:1111 1101 ----->补码:1111 1110
-5原码:1000 0101 --->反码:1111 1010------>补码:1111 1011
-2&-5: 1111 1010 ---->反码:1111 1001 --->原码:1000 0110 ---->-6
-2|-5: 1111 1111 ---->反码:1111 1110 --->原码:1000 0001 ---->-1
-2^-5: 0000 0101 ---->5 正数三码相同
************************************************************************************
位运算中的左移与右移:-5 >>2 、-5 <<2
左移则右边位补0,右移则左边用符号位补,是负数依旧需要转化为补码
-5原码:1000 0101 --->反码:1111 1010------>补码:1111 1011
右移2位:高位补符号位1 ----->1111 1110(补码) ---->1111 1101(反码)---->1000 0010(原码) -2
左移2位:低位补0 ---->1110 1100(补码) ---->1110 1011(反码)---->1001 0100 (原码) -20
********************************************************************************************************
golang里面的switch后面不用带break 默认就会带上
for循环的简单实现:
for i:=0;i<=10; i++{
fmt.Printf("hello go
")
}
}
go语言实现字符串的遍历:两种方式
var num ="hello go" for i:=0;i<len(num);i++{ fmt.Printf("%c ",num[i]) } for index,val:=range num{ fmt.Printf("下标是%d值是%c ",index,val)