十进制转二进制,即把十进制数m除以2,得到商和余数,记录下余数,用商继续除以2得到商和余数,如此循环直至商为0后,把所有的余数倒叙排列即为二进制数。具体如下:
- 十进制数123
- 123/2=61,123%2=1
- 61/2=30,61%2=1
- 30/2=15,30%2=0
- 15/2=7,15%2=1
- 7/2=3,7%2=1
- 3/2=1,3%2=1
- 1/2=0,1%2=1
- 得到的二进制数为所有的取模数倒叙排列:
- 1111011`
golang算法实现
- package main
-
- import (
- "fmt"
- "strconv"
- )
-
- // 将十进制数字转化为二进制字符串
- func convertToBin(num int) string {
- s := ""
-
- if num == 0 {
- return "0"
- }
-
- // num /= 2 每次循环的时候 都将num除以2 再把结果赋值给 num
- for ; num > 0; num /= 2 {
- lsb := num % 2
- // strconv.Itoa() 将数字强制性转化为字符串
- s = strconv.Itoa(lsb) + s
- }
- return s
- }
-
- func main() {
- fmt.Println(
- convertToBin(2),
- convertToBin(19),
- convertToBin(15),
- convertToBin(0),
- )
- }
十进制转八进制,即把十进制数m除以8,得到商和余数,记录下余数,
用商继续除以8得到商和余数,如此循环直至商为0后,把所有的余数倒叙排列即为八进制数。具体如下:
- 十进制数678
- 678/8=84,678%8=6
- 84/8=10,84%8=4
- 10/8=1,10%8=2
- 1/8=0,1%8=1
- 得到的八进制数为所有的取模数倒叙排列:
- 1246`
十进制转十六进制,即把十进制数m除以16,得到商和余数,记录下余数,
用商继续除以16得到商和余数,如此循环直至商为0后,把所有的余数倒叙排列即为十六进制数。具体如下:
- 十进制数8912
- 8912/16=557,8912%16=0
- 557/16=34,557%16=13
- 34/16=2,34%16=2
- 2/16=0,2%16=2
- 得到的十六进制数为所有的取模数倒叙排列:
- 22D0`
设置功能开关复选框
level & 功能代码 不为0表示启用,为0标识未启用
- //28= 4 + 8 +16
- var a = 28 & 3
- fmt.Println(a)
-
- if ((c.getLevel() & b.getCode()) > 0) {
- checkSum += Integer.parseInt(String.valueOf(b.getCode()));
- }
level = level | 功能代码
level = level & ~功能代码 (~为取反)
按位取反之后返回一个每个 bit 位都取反的数,对于有符号的整数来说,是按照补码进行取反操作的(快速计算方法:对数 a 取反,结果为 -(a+1) ),对于无符号整数来说就是按位取反。例如:
- func main() {
- var a int8 = 3
- var b uint8 = 3
- var c int8 = -3
-
- fmt.Printf("^%b=%b %d\n", a, ^a, ^a) // ^11=-100 -4
- fmt.Printf("^%b=%b %d\n", b, ^b, ^b) // ^11=11111100 252
- fmt.Printf("^%b=%b %d\n", c, ^c, ^c) // ^-11=10 2
- }