天天看点

计算机专业知识补,计算机基础知识--运算

1.计算机中的二进制与位运算

首先看看 原码, 反码, 补码是如何定义的

最高位为符号位,0表示正数,1表示负数。

原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,

正数的原码,反码 和补码相同,这里主要分析负数;

负数原码 = 绝对值的二进制数,最高位补1

负数反码 = 原码,除符号位,按位取反

负数补码 = 反码+1

例如:

6:

6的原码: 00000000 00000000 00000000 00000101

6的反码: 00000000 00000000 00000000 00000101

6的补码: 00000000 00000000 00000000 00000101

-6:

-6的原码: 10000000 00000000 00000000 00000101

-6的反码: 11111111 11111111 11111111 11111010 (原码,除符号位,按位取反)

-6的补码: 11111111 11111111 11111111 11111011 (反码+1)

2.计算机是如何进行算数运算的

1、正数没有列外,在计算机中以原码标识

2、负数不同了,在计算机中,负数以原码的补码形式表达。

3、java提供的位运算符:

左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符。

左移 <<

左边的二进制丢弃,右边补0

对于正数而言,左移 n 相当于乘以2的n次方(但效率比乘法高)。

6<<1 = 6 * 2^1

6<<2 = 6 * 2^2

6<<3 = 6 * 2^3

6<<4 = 6 * 2^4

右移 >>

正数左补0,负数左补1.

对于正数而言,右移 n 相当于除以2的n次方(但效率比除法高)

6>>1 = 6 / 2^1

6>>2 = 6 / 2^2

6>>3 = 6 / 2^3

6>>4 = 6 / 2^4

无符号右移 >>>

无论正数,还是负数,左边补0

位与( & )

都为1 ,才为1

位或( | )

都为0,才为0

位异或( ^ )

同为0,异为1

不进位加法。

位非( ~ )

取反