1 进制表示方法
- 二进制
- 十进制
- 八进制
0(零)开头,后边正常显示,如 023表示八进制的23,对应十进制的28+31=19
- 十六机制
0x开头,x不区分大小写;如:0x12就是十六进制的12,对应十进制的116+21=18
2 进制转换
1 其他进制转十进制
1 二进制转十进制
从右往左,逐位计算 位值1*2``(位数1-1)``+位置2*2``(位数2-1)``+...+位置n*2``(位数n-1)
2 八进制转十进制
从右往左,逐位计算 位值1*8``(位数1-1)``+位置2*8``(位数2-1)``+...+位置n*8``(位数n-1)
3 十六进制转十进制
从右往左,逐位计算 位值1*16``(位数1-1)``+位置2*16``(位数2-1)``+...+位置16*16``(位数n-1)
2 十进制转其他进制
1 十进制转成二进制
规则:讲该十进制数除以2,直到商为0为止,然后将步得到的余数倒过来;就是对应的二进制;
56/2 = 14 余 0
14/2 = 7 余 0
7/2 = 3 余 1
3/2 = 1 余 1
1/2 = 0 余 1
结果就是 11100
2 十进制转成八进制
规则:讲该十进制数除以8,直到商为0为止,然后将步得到的余数倒过来;就是对应的二进制;
156/8 = 19 余 4
19/8 = 2 余 3
2/8 = 0 余 2
结果就是 0234 开始的零是表示0234是八进制数
3 十进制转成十六进制
3 二进制转其他进制
1 二进制转八进制
方法一:二进制转成十进制,十进制再转成八进制
方法二:将二进制的数,从右往左开始,每三位数作为一组,将这三位数转成十进制;从右往左三位数一组全部转完就是最终的八进制数了;(三位二进制数的上限是111 对应的就是十进制的7;正好也是八进制的上限7)
二进制 【11010101】 转成八进制
【11 010 101】从右往左每三位数一组
3 2 5 每三位数转成一个十进制数
加上前缀最终结果就是 0325
2 二进制转成十六进制
方法一:二进制转成十进制,十进制再转成十六进制
方法二:将二进制的数,从右往左开始,每4位数作为一组,将这4位数转成十进制;从右往左4位数一组全部转完就是最终的十六进制数了;(4位二进制数的上限是1111 对应的就是十进制的15;正好也是八进制的上限15)
二进制 【11010101】 转成十六进制
【1101 0101】从右往左每三位数一组
13 5 每4位数转成一个十进制数
D 5 转成16进制
加上前缀最终结果就是 0xD5
4 其他进制转二进制
1 八进制转二进制
规则:将八进制的每一位,转成对应的一个3位得二进制数
将八进制得 0237 转成二进制
【0 2 3 7】 逐位转换
010 011 111
结果就是 010 011 1111
2 十六进制转二进制
规则:将十六进制的每一位,转成对应的一个4位得二进制数
将八进制得 0x237 转成二进制
【0x 2 3 7】 逐位转换
0010 0011 0111
结果就是 0010 0011 0111
3 原码、反码、补码
网上对原码、反码、补码得解释过于复杂;精简一下就是以下六句话:
对于有符号得数而言:
- 二进制得最高位是符号位:0表示正数,1表示负数
1 ==> **0**``000 0001
-1 ==> **1**``000 0001
- 正数得原码、反码、补码都一样
<br />
- 负数的反码:它的符号位不变,其他位取反(0变1,1变0)
负数的补码:它的反码+1
1 -1 0 源码 0000 0001 1000 0001 0000 0000 反码 0000 0001 1111 1110 0000 0000 补码 0000 0001 1111 1111 0000 0000
0的反码、补码都是0 (特殊规定)
- 在计算机运算的时候,都是以补码的方式来运算的; (负数的二进制都是补码的形式存在的)
上边就是规定,记住就行了,没有任何原理,就是这么规定的; 对于第六条有点懵
疑问:为什么要用补码呢
https://www.bilibili.com/video/BV14J411A77q?spm_id_from=333.337.search-card.all.click&vd_source=8ae02c1de2115d30054396cb4aaec183
归根到底就是为了少制作一个减法器,利用现有的加法器就能够实现减法
4 按位与 &、按位或 |、按位异或 ^
按位与 & : 两位同时为1,则结果返回1,否则返回0;
按位或 | : 两位只要有1,则返回1,否则返回0;0|0=0;0|1=1;1|0=1;1|1=1(有1则1)
按位异或 ^ : 两位的值不相同(即:一个为1一个为0)则返回1,否则返回00``0=0;0``1=1;1``0=1;1``1=0;(同0异1)