计算机识别数字串需要一个标志来判断是哪种进制的数字
编译器默认数值是十进制(只有十进制存在正负号)
标识:二进制0b(1010) 八进制0(1244)十六进制0x(2a4a)
十进制:
权重:10 每位数乘以进制数的次方
逢十进一 表示范围:0~9
1234 = 4*10^0 + 3*10^1 + 2*10^2 + 1*10^3
二进制:
权重:2
逢二进一 表示范围: 0,1
在1字节中:0000 1011 = 1*2^0+1*2^1+0*2^2+1*2^3 = 11
第一位表示符号位:正负号 0为正 1为负
一个字节能表示的范围:127 ~ -128
正数计算 倒着按顺序加
eg.0011 1010 = 2+8+16+32 = 58
注:负数的表示与整数不相同(下面会讲到如何表示负数)
十进制与二进制的转换:
1.分解法 适用于较小数字,能直接用2^10以内的数字加出的
eg. 11 = 8(2^3)+ 2(2^1)+ 1(2^0) 11 => 0000 1011
3 = 2(2^1)+ 1(2^0) 3 => 0000 0011
1 = 1(2^0) 1 => 0000 0001
2.倒除法(辗转相除法)适合任何数据
eg. 2/200 余0
2/100 余0
2/50 余0
2/25 余1
2/12 余0
2/6 余0
2/3 余1
2/1 余1
0
除完后将余数从下向上写出 即为二进制表示该数
200 = 1100 1000 X(200>127 故要用两个字节表示 为 0000 0000 1100 1000)
负数:
按位取反(取反的结果叫反码)再加一(+1后的结果叫补码)
计算机中进行计算的都是用补码进行计算 正数的补码= 原码,所以不用进行转换
eg.
123 = 0111 1011
反码 1000 0100
补码 1000 0101(-123)
补码转换到原码依旧按位取反再加1
-123 = 1000 0101
取反 0111 1010
加一 0111 1011(123)
八进制:
权重:8 取值范围:0~7
逢八进一
二进制推八进制:二进制数字串从后往前三位一划分 位数不够在前面补0
每位1对应4 2 1 每位数字和为该位的八进制表示
01 010 100 101 001
001 010 100 101 001
1 2 4 5 1
八进制推二进制:一个位对应二进制三个位
//int a = 01278;
不是个合理数字 编译器默认是十进制 0开头为八进制数字标识 八进制中不能出现数字8
八进制推十进制:倒着当前为数字乘八的次方叠加
01234 = 4*8^0 + 3*8^1 + 2*8^2 + 1*8^3
十进制推八进制:辗转相除法直接除八 余数倒向上写
100的八进制表示为:100->0144
100/8 余4
12/8 余4
1/8 余1
0
十六进制:
权重:16 取值范围:0~9 A-10 B-11 C-12 D-13 E-14 F-15 逢16进1
二进制推十六进制:二进制数字串中四位一划分
每位对应 8 4 2 1
eg. 010 1010 0111 1111 1001 -> 0x2a7f9
0010 1010 0111 1111 1001
2 a(10) 7 f(15) 9
十六进制推二进制:一个位对应四个位
十六进制推十进制:倒着当前数字乘16的次方
十进制推十六进制:辗转相除法直接除16 余数倒向上写