go开发入门基础之组成原理位运算,原码反码补码

正数的原码反码补码都相同。 -------> 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\n")
    }
}

go语言实现字符串的遍历:两种方式

    var num ="hello go"
    for i:=0;i<len(num);i++{
        fmt.Printf("%c\n",num[i])
    }

    for index,val:=range num{
        fmt.Printf("下标是%d值是%c\n",index,val)