• 十进制转其他进制算法 位运算


    十进制数转二进制数

    十进制转二进制,即把十进制数m除以2,得到商和余数,记录下余数,用商继续除以2得到商和余数,如此循环直至商为0后,把所有的余数倒叙排列即为二进制数。具体如下:

    1. 十进制数123
    2. 123/2=61,123%2=1
    3. 61/2=30,61%2=1
    4. 30/2=15,30%2=0
    5. 15/2=7,15%2=1
    6. 7/2=3,7%2=1
    7. 3/2=1,3%2=1
    8. 1/2=0,1%2=1
    9. 得到的二进制数为所有的取模数倒叙排列:
    10. 1111011`

    golang算法实现

    1. package main
    2. import (
    3. "fmt"
    4. "strconv"
    5. )
    6. // 将十进制数字转化为二进制字符串
    7. func convertToBin(num int) string {
    8. s := ""
    9. if num == 0 {
    10. return "0"
    11. }
    12. // num /= 2 每次循环的时候 都将num除以2 再把结果赋值给 num
    13. for ; num > 0; num /= 2 {
    14. lsb := num % 2
    15. // strconv.Itoa() 将数字强制性转化为字符串
    16. s = strconv.Itoa(lsb) + s
    17. }
    18. return s
    19. }
    20. func main() {
    21. fmt.Println(
    22. convertToBin(2),
    23. convertToBin(19),
    24. convertToBin(15),
    25. convertToBin(0),
    26. )
    27. }

    十进制数转八进制数

    十进制转八进制,即把十进制数m除以8,得到商和余数,记录下余数,
    用商继续除以8得到商和余数,如此循环直至商为0后,把所有的余数倒叙排列即为八进制数。具体如下:

    1. 十进制数678
    2. 678/8=84,678%8=6
    3. 84/8=10,84%8=4
    4. 10/8=1,10%8=2
    5. 1/8=0,1%8=1
    6. 得到的八进制数为所有的取模数倒叙排列:
    7. 1246`

    十进制数转十六进制数

    十进制转十六进制,即把十进制数m除以16,得到商和余数,记录下余数,
    用商继续除以16得到商和余数,如此循环直至商为0后,把所有的余数倒叙排列即为十六进制数。具体如下:

    1. 十进制数8912
    2. 8912/16=557,8912%16=0
    3. 557/16=34,557%16=13
    4. 34/16=2,34%16=2
    5. 2/16=0,2%16=2
    6. 得到的十六进制数为所有的取模数倒叙排列:
    7. 22D0`

    位运算应用

    设置功能开关复选框

    • 判断某一功能是否启用

    level & 功能代码 不为0表示启用,为0标识未启用

    1. //28= 4 + 8 +16
    2. var a = 28 & 3
    3. fmt.Println(a)
    4. if ((c.getLevel() & b.getCode()) > 0) {
    5. checkSum += Integer.parseInt(String.valueOf(b.getCode()));
    6. }
    • 设置生效

    level = level | 功能代码

    • 设置不生效

    level = level & ~功能代码 (~为取反)

    按位取反之后返回一个每个 bit 位都取反的数,对于有符号的整数来说,是按照补码进行取反操作的(快速计算方法:对数 a 取反,结果为 -(a+1) ),对于无符号整数来说就是按位取反。例如:

    1. func main() {
    2. var a int8 = 3
    3. var b uint8 = 3
    4. var c int8 = -3
    5. fmt.Printf("^%b=%b %d\n", a, ^a, ^a) // ^11=-100 -4
    6. fmt.Printf("^%b=%b %d\n", b, ^b, ^b) // ^11=11111100 252
    7. fmt.Printf("^%b=%b %d\n", c, ^c, ^c) // ^-11=10 2
    8. }

  • 相关阅读:
    2023年五一杯数学建模A题无人机定点投放问题求解全过程论文及程序
    大数据必看:大厂十年架构师职业生涯实战经验总结,《大规模分布式系统架构与设计实战》
    如何在Qt6中引入Network模块
    一文学会Zookeeper
    VoLTE端到端业务详解 | 基本原理
    Java面向对象(高级)-- 类的成员之四:代码块
    【Python datetime模块精讲】:时间旅行者的日志,精准操控日期与时间
    ARM 按键控制 LED灯,蜂鸣器,风扇
    android Studio为项目生成签名
    rust结构体
  • 原文地址:https://blog.csdn.net/hudeyong926/article/details/126342183