位运算
位运算符
进制:
数码:某一种进制中所能出现的数字
十进制:0至9
二进制:0、1
八进制:0至7
十六进制:0至9与A至F
基数:某一种进制中所出现的数码的个数
十进制:10(逢十进一)
二进制:2(逢二进一)
八进制:8(逢八进一)
十六进制:16(逢十六进一)
权:用于衡量,某一种进制中某一位上的数码作用大小的值,权是一个幂(xy)
x表示:基数
y表示:位数
(1234)10
数码4所在的在位的权:100 1
数码3所在的在位的权:101 10
数码2所在的在位的权:102 100
数码1所在的在位的权:103 1000
(1234)10为什么是1234
4*100+3*101+2*102+1*103=1234
(10101)2
从右向左每一位数码所在的位的权:
数码1所在的在位的权:20 1
数码0所在的在位的权:21 2
数码1所在的在位的权:22 4
数码0所在的在位的权:23 8
数码1所在的在位的权:24 16
(10101)2=1*20+0*21+1*22+0*23+1*24=21
8421BCD码
可以将255之前的二进制很方便转换成十进制
权 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
二进制数 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
权展开式:
某种进制中数位上的数码与该数码所在位上的权的乘积的和,任何一种进制都可按权展开式,转换为十进制。
(75)8=(?)10
7*81 + 5*80=61
(FA)16=(?)10
F*161 A*160 =
15*161 10*160 =(250)10
十进制转换成二进制:
分两整数与小数部分,分别进行转换,整数部分采用的是基数连除取余法。小数部分采用的是基数连乘取整法
权 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
二进制数 | 1 | 0 | 1 |
十进制数
二进制转换为八进制(或十六进制):
1、以小数点为起点,整数部分向左,小数部分向右,每3位(或4位)一组,不足位数提整数部分在左边补0,小数部分在右边补0。
2、再将每一组3位(或4位)二进制转换成八进制(或十六进制)数。
(010 110 101 . 010)=(?)8
(010 110 101 . 010)=( 265.2)8
(10110101.01)=(?)16
(1011 0101.0100)=(?)16
11 5 .4
B 5 .4
(1011 0101.0100)=( B5.4)16
原码:原码就是符号(正负号)加上二进制数
正数的原码在最高位用0表示
负数的原码在最高位用1表示
注意:计算机中高位只能是第32位
十进制数10的原码:
0 000 0000 0000 0000 0000 0000 0000 1010
十进制数-10的原码:
1 000 0000 0000 0000 0000 0000 0000 1010
反码:
正数的反码与原码相同
负数的反码是在原码的基础上,符号位不变,其余位取反
十进制数10的反码:
0 000 0000 0000 0000 0000 0000 0000 1010
十进制数-10的反码:
原码:1 000 0000 0000 0000 0000 0000 0000 1010
反码:1 111 1111 1111 1111 1111 1111 1111 0101
补码:
正数的补码与原码相同
负数的补码在反码的基础上+1
十进制数10的补码:
0 000 0000 0000 0000 0000 0000 0000 1010
十进制数-10的补码:
反码:1 111 1111 1111 1111 1111 1111 1111 0101
补码:1 111 1111 1111 1111 1111 1111 1111 0110
正数的原码反码补码相同
负数的
原码:最高位为1
反码:在原码基础上,符号位不变,其余位取反
补码:在反码的基础上加1
&:按位与
运算规则:
参与运算的两个操作数的二进制形式,对应位上的数,如果都为1,那么结果位上的就是1,否则为0
|:按位或
运算规则:
参与运算的两个操作数的二进制形式,对应位上的数,如果都为0,那么结果位上的就是0,否则为1(换句话说,只要有一个为1则为1)
^:按位异或
运算规则:
参与运算的两个操作数的二进制形式,对应位上的数,如果不同,那么结果位上的就是1,否则为0
~:按位非
运算规则:
对操作数的二进制形式每一位取反(包含符号位)
示例:
<<:算术左移
运算规则:
对参与运算的操作数的二进制形式,符号位不变,其余位整体左移,左边溢出的忽略,右边空位补0
>>:算术右移
运算规则:
对参与运算的操作数的二进制形式,符号位不变,其余位整体右移,右边溢出的忽略,右边空位补符号位
示例: