Go语言基础--进制转换

二进制转十进制

       从右向左开始,从右边第一个数开始,依次乘以2的n次幂 ,n从0开始,每次递增1(0,1,2,3 。。。。)得出得数相加就是十进制得数

如:0101=1*2的0次幂+0*2的1次幂+1*2的2次幂+0*2的3次幂=5

 十进制转二进制

        除2取余法:将十进制数除以2,记录余数,然后将商继续除以2,直到商为0。将得到的余数从下到上排列(即最后得到的余数在最上面),即为该十进制数对应的二进制数。

将十进制数23转换为二进制:

  • 23 ÷ 2 = 11 余 1
  • 11 ÷ 2 = 5 余 1
  • 5 ÷ 2 = 2 余 1
  • 2 ÷ 2 = 1 余 0
  • 1 ÷ 2 = 0 余 1

所以,23的二进制表示为10111

八进制转十进制

        在八进制数中,每一位的数值范围是0到7,而每一位的权重是8的幂次方,从右往左递增(最右边的位是8的0次方,然后是8的1次方,依此类推)。

        如745 最右边是8的0次幂 中间是8的1次幂 左边是8的2次幂=5*1+4*8+7*64=485

十进制转八进制

        除8取余法:与二进制转换类似,将十进制数除以8,记录余数,然后将商继续除以8,直到商为0。将得到的余数从下到上排列,即为该十进制数对应的八进制数。

将十进制数35转换为八进制:

  • 35 ÷ 8 = 4 余 3
  • 4 ÷ 8 = 0 余 4

所以,35的八进制表示为43

十进制转十六进制

        除16取余法:与二进制和八进制转换类似,将十进制数除以16,记录余数,然后将商继续除以16,直到商为0。但十六进制中,余数可能是10到15,这些值在十六进制中分别用A到F(或小写a到f)表示。将得到的余数(包括A-F)从下到上排列,即为该十进制数对应的十六进制数。

将十进制数255转换为十六进制:

  • 255 ÷ 16 = 15 余 15(F)
  • 15 ÷ 16 = 0 余 15(F)

所以,255的十六进制表示为FF

十六进制转十进制         

        在十六进制数中,每一位的数值范围是0到F(其中F代表十进制中的15),而每一位的权重是16的幂次方,从右往左递增(最右边的位是16的0次方,然后是16的1次方,依此类推)。

     如  1A3F1 最右边是16的0次幂 依次加一次幂=15*1+3*16+10*256+1*4096=6719

二进制转十六进制

  1. 分组:首先,将二进制数从右往左每4位分成一组(如果最左边不足4位,则前面补0)。

  2. 转换:将每一组的4位二进制数转换为对应的十六进制数。转换时,可以直接使用二进制到十六进制的映射表,或者使用二进制数的值来计算。

将二进制数10101011010转换为十六进制:

  • 分组:0101 1010 1010(注意最左边补了两个0以达到4的倍数)
  • 转换:A 5 5

所以,10101011010的十六进制表示为A55 

十六进制转二进制

  1. 拆分每一位:首先,将十六进制数的每一位(0-9或A-F)拆分开来。

  2. 转换每一位:然后,将每一位十六进制数转换为对应的4位二进制数。这可以通过查找十六进制到二进制的映射表来完成,或者使用简单的转换规则(例如,A=1010, B=1011, ..., F=1111)。

  3. 拼接结果:最后,将转换得到的所有二进制数按照原来的顺序拼接起来,形成最终的二进制数。

将十六进制数1A3F转换为二进制:

  • 拆分:1 A 3 F
  • 转换:0001 1010 0011 1111
  • 拼接:0001101000111111

所以,1A3F的二进制表示为0001101000111111(注意,这里为了清晰展示了前导零,但在实际表示中,前导零通常可以省略)。

二进制转八进制

  1. 分组:与十六进制类似,但这次是每3位二进制数分成一组(如果最左边不足3位,则前面补0)

将二进制数10101011010转换为八进制:

  • 分组:010 101 011 010(注意最左边补了两个0以达到3的倍数)
  • 转换:2 5 3 2

所以,10101011010的八进制表示为2532

八进制转二进制

  1. 拆分每一位:与十六进制类似,将八进制数的每一位(0-7)拆分开来。

  2. 转换每一位:然后,将每一位八进制数转换为对应的3位二进制数。这可以通过查找八进制到二进制的映射表来完成,或者使用简单的转换规则(例如,1=001, 2=010, ..., 7=111)。

  3. 拼接结果:最后,将转换得到的所有二进制数按照原来的顺序拼接起来,形成最终的二进制数。

将八进制数2532转换为二进制:

  • 拆分:2 5 3 2
  • 转换:010 101 011 010
  • 拼接:10101011010

所以,2532的二进制表示为010101011010(同样,前导零在实际表示中通常可以省略)。

 位运算

        位运算(Bitwise Operations)是在整数类型(通常是二进制表示)上直接进行操作的运算。这些操作直接对整数在内存中的二进制位(bit)进行,而不是对它们所表示的值进行操作。位运算符允许我们进行如位与(AND)、位或(OR)、位异或(XOR)、位非(NOT)、左移(Shift Left)和右移(Shift Right)等操作。

常见的位运算符
  1. 位与(AND)&
    • 对每一位执行逻辑与操作。只有两个比较位都为1时,结果位才为1。
    • 示例:5 & 3(二进制:101 & 011)结果为1(二进制:001)。
  2. 位或(OR)|
    • 对每一位执行逻辑或操作。只要两个比较位中有一个为1,结果位就为1。
    • 示例:5 | 3(二进制:101 | 011)结果为7(二进制:111)。
  3. 位异或(XOR)^
    • 对每一位执行逻辑异或操作。当两个比较位不相同时,结果位为1;相同时,结果位为0。
    • 示例:5 ^ 3(二进制:101 ^ 011)结果为6(二进制:110)。
  4. 位非(NOT)~(注意:这通常是对整个数进行操作,而不是两个数)
    • 对数的每一位执行逻辑非操作。0变为1,1变为0。
    • 示例:~5(假设是8位二进制表示)结果为-6(二进制:...11111010,注意前面的位取决于数的表示范围,这里用省略号表示)。
  5.  左移(Shift Left)<<
    • 将数的所有位向左移动指定的位数,右边超出的位被丢弃,左边超出的部分取决于数的符号(对于有符号整数)。(符号位不变,低位补0)
    • 示例:5 << 2(二进制:101 << 2(10))结果为20(二进制:10100)。
  6. 右移(Shift Right)>>
    • 将数的所有位向右移动指定的位数。对于有符号整数,左边超出的位用符号位填充(即正数用0填充,负数用1填充)。(低位溢出,符号位不变,用符号位补充高位)
    • 示例:5 >> 2(二进制:101 >> 2)结果为1(二进制:001

 注意:正数的符号位是0 负数的符号位是1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值