二进制和十进制互相转换
二进制的非负转十进制
把二机制中的每个1单独转十进制然后相加即可
例:
01010101 2进制(unsigned char)
2的6次方+2的4次方+2的2次方+2的0次方
=64+16+4+1=85
十进制的非负转二进制
除2取余,逆序排序
先得到的数位为低位,后得到的数位为高位
例:
91 十进制(unsigned char)
91/2=45 1
45/2=22 1
22/2=11 0
11/2=5 1
5/2=2 1
2/2=1 0
1/2=0 1
所以91所对应的二进制就是:01011011(不够8位高位补0)
负数,符号位(最高位)为1
二转十:取反加一,转十添负
char类型
10100011取反01011100加一01011101转十93添负-93
十转二:去负转二,取反加一
-93去负93转二01011101取反10100010加一10100011
八进制
字面值前缀:0,例0520
printf/scanf格式化占位符:%[#]o(加#会输出前缀)
printf("%o",0520) //520
printf("%#o",0520) //0520
转换:
1110 1001->11 101 001->0351
3 5 1
十六进制
字面值前缀0x/0X,例:0xb520
printf/scanf格式化占位符:%[#]x
转换:
1100 0011->0xc3
c(12) 3