本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1.1进制转换
二进制:0、1(0b开头)
八进制:0-7 (0开头)
777+1=01000
十进制:0-9
999+1 =1000
十六进制:0-9,a-f(0x开头)
十进制转二进制:短除法逆序法
10%2=0
5%2=1
2%2=0
1
1010:按权相加法
0*2^0+1*2^1+0*2^2+1*2^3 = 10
八进制转二进制:一位八进制数等于三位二进制数,不足三位左侧补0
056 101 110
5:101
6:110
二进制转八进制:从右侧开始三位二进制数合一位八进制数,不足三位左侧补0
1101 0110
011 010 110
3 2 6
十六进制转二进制:一位十六进制数分成四位二进制数,不足四位左侧补0
0xaf
a f
1010 1111
二进制转十六进制:从右侧开始每四位二进制数合一位十六进制数,不足四位左侧补0
1111 0110 101
0111 1011 0101
7 B 5
0x7B5
十六进制转十进制:
0x5a
5*16^1 + A*16^0=90
十进制转十六进制:短除16
十进制转八进制:短除8
八进制转十进制:
045
5*8^0+4*8^1=37
十六进制不能直接和八进制之间转换,需要借助二进制或十进制进行中转
单位转换: 1G=1024M 1M=1024kb 1k=1024byte 1byte = 8bit
1.2 源码/反码/补码
内存中每一个byte(字节)有一个十六进制数表示的地址
char占1byte,8bit
每一个bit能表示二进制的0或1
在计算机中,数值是以补码形式存储的;正数的原返补码都是其本身
负数:有一个符号位(最高位为负则为1,为正则为0) 源码:转换成二进制的数值 反码:在源码的基础上取反,符号位不变,原位置为0则变为1 补码:在反码的基础上+1
无符号char类型值域范围:0-255 有符号的char值域范围:-128 - 127
解析:signed char的最大值为0111 1111—>127
signed char的最小值为1111 1111—>-127
但由于是补码存储,-127的补码为1000 0001
由于+0和-0是没有区别的,但对于存储器和编译器来讲需要充分利用每个字节,更不想出现二义性。 所以,将-0 表示为-128,
这样既增大了signed char 数值的表示范围,又消除了-0 的二义性。
所以 signed char的最小值为-128
源码:1000 0000
反码:1111 1111
补码:1000 0000