计算机可不可以进行单位的转换,计算机单位转换 && 位运算 && 进制转换

一、单位转换

在计算机科学中,bit是表示信息的最小单位,叫做二进制位;一般用0和1表示。

Byte叫做字节,由8个位(8bit)组成一个字节(1Byte),用于表示计算机中的一个字符

1T = 1024G

1G = 1024M

1M = 1024KB

1KB = 1024B

1B = 1Byte = 8 bit

【疑问】电脑硬盘500G,打开却只有480G ??

G、M、K之间的进制是1024,这是由于2进制的原因而定义的。而在IT产品行业多数是按1000进制计算,即1GB=1000MB,这就是我们常看到的硬盘格式化以后为什么缩水了的原因,且硬盘越大差别越大。因为厂家是按1GB=1000MB计算的硬盘容量,而格式化时系统是按1GB=1024MB计量的。

带宽与网速

网速单位换算

在计算机网络或者是网络运营商中,一般,宽带速率的单位用bps(或b/s)表示;bps表示比特每秒即表示每秒钟传输多少位信息,是bit per second的缩写。在实际所说的1M带宽的意思是1Mbps(是兆比特每秒Mbps不是兆字节每秒MBps)。

线路单位是bps,表示bit(比特)/second(秒)

用户在网上下载时显示的速率单位往往是Byte(字节)/s(秒),注意是大写字母B

带宽16Mbps = 16/8MBps = 2MBps (理论下载速度)

二、位运算基本概念

知乎-在写代码的过程中使用位运算的好处?

九章 - 干货!史上最强位运算面试题大总结!

九章 - 位运算入门教程

2.1、左移操作 a << b

将A的二进制表示的每一位向左移B位,左边超出的位截掉,右边不足的位补0

A = 1100 B = 2

A << B = 110000

2.2、右移操作 A >> B , A >>> B

右移操作分为 算数右移 和 逻辑右移

区别:算术右移是带符号的右移,逻辑右移是不带符号的右移。

算术右移:将A的二进制表示的每一位向右移B位,右边超出的位截掉,左边不足的位补符号位的数。

逻辑右移:将A的二进制表示的每一位向右移B位,右边超出的位截掉,左边不足的位补0。

C语言:只有逻辑右移 A >> B

JAVA 和 Python中:算术右移 A >> B , 逻辑右移 A >>> B

A = 11111111111111111111111110000001

B = 2

A >> B = 11111111111111111111111111100000

A >>> B = 00111111111111111111111111100000

2.3、按位与操作 a & b

将A和B的二进制表示的每一位进行与操作,只有两个对应的二进制位都为1时,结果位才为1,否则为0.

A = 001010

B = 101100

A & B = 001000

2.4、按位或操作 a | b

将A和B的二进制表示的每一位进行或操作,只要两个对应的二进制位有一个为1,结果位就为1,否则为0.

A = 001010

B = 101100

A | B = 101110

2.5、按位非操作 ~ a

将A的二进制表示每一位进行取反操作,如果对应的二进制位为0,结果位为1,否则为0.

A = 00000000000000000000000000001010

~A = 11111111111111111111111111110101

2.6、按位异或操作 a ^ b

将A和B的二进制表示的每一位进行异或操作,如果对应的二进制位不同,结果位为1,否则为0.

A = 001010

B = 101100

A ^ B = 100110

三、位运算应用总结

清零取反要用与,某位置一可用或

若要取反和交换,轻轻松松用异或

前提 :源操作数s 掩码mask

3.1、按位与 &

清零特定位 (mask中特定位置0,其它位为1,s=s&mask)

s = 1010 第二位清0

8 = 10 & 13

1000 = 1010 & 1101

取某数中指定位 (mask中特定位置1,其它位为0,s=s&mask)

s = 1010 取第二位 和 第三位

2 = 10 & 2

0010 = 1010 & 0010 // 同为1时,则为1。故此第二位为1

0 = 10 & 4

0000 = 1010 & 0100 // 同上。故此第三位为0

3.2、按位或 |

常用来将源操作数某些位置1,其它位不变。 (mask中特定位置1,其它位为0 s=s|mask)

s = 1010 将第三位置为1

14 = 10 | 4

1110 = 1010 | 0100 // 只有一个为1,就为1

3.3、位异或 ^

使特定位的值取反 (mask中特定位置1,其它位为0 s=s^mask)

s = 1010 将第二位取反

8 = 10 ^ 2

1000 = 1010 ^ 0010 // 不同为1 ,相同为0

不引入第三变量,交换两个变量的值 (设 a=a1,b=b1)

int a=10,b=12;

a=a^b;

b=a^b;

a=a^b;

a = 1010 b=1100

a = a ^ b = 1010 ^ 1100; // a = 0110

b = a ^ b = 0110 ^ 1100; // b = 1010

a = a ^ b = 0110 ^ 1010; // a = 1100

此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。这就意味着 任意一个数与任意一个给定的值连续异或两次,值不变。

二进制补码运算公式

-x = ~x + 1 = ~(x-1)

~x = -x-1

-(~x) = x+1

~(-x) = x-1

x+y = x - ~y - 1 = (x|y)+(x&y)

x-y = x + ~y + 1 = (x|~y)-(~x&y)

x^y = (x|y)-(x&y)

x|y = (x&~y)+y

x&y = (~x|y)-~x

x==y: ~(x-y|y-x)

x!=y: x-y|y-x

x < y: (x-y)^((x^y)&((x-y)^x))

x <=y: (x|~y)&((x^y)|~(y-x))

x < y: (~x&y)|((~x|y)&(x-y))//无符号x,y比较

x <=y: (~x|y)&((x^y)|~(y-x))//无符号x,y比较

四、位运算实战

优秀程序员不得不知道的20个位运算技巧

电脑大小端

public static byte[] intToByteArray(int a)

{

byte[] ret = new byte[4];

ret[3] = (byte) (a & 0xFF);

ret[2] = (byte) ((a >> 8) & 0xFF);

ret[1] = (byte) ((a >> 16) & 0xFF);

ret[0] = (byte) ((a >> 24) & 0xFF);

return ret;

}

位运算代替乘除法,提高运算速度

位运算实现加、减、乘、除运算

用位运算来代替乘法、除法以及取模

假设有两个数,A和B。B为2^n,期中n>=0,A>=0。则:

要求A * B的话,则可使用<>操作符,A >> n。

要求A % B的话,则可使用&操作符,A&(B-1)。

如果A为负数的话,则未必成立。比如,当A为-1,B为2的时候,可知(-1)%2=-1,而-(1)&0=0。

记住,当我们把乘法,除法及取模运算转化为位运算时,都要求A>=0。

五、进制转换

5.1、二进制 与 八进制

e35a43c0508f323b583b3a32795cc28f.png

二进制 转 八进制

1a02e481280f232548a2278044c9147d.png

八进制 转 二进制

5.2、二进制 与 十六进制

1baef19bf76708f1cd9db2b93d5ac6eb.png

二进制 转 十六进制

6baa23f3727b3b34dc7d370d0754894e.png

十六进制 转 二进制

5.3、十进制 与 八进制、十六进制

659540fc5cbf8267f2f5c2c66d441c0b.png

十进制 转 八进制、十六进制

6711a8a577e6a1bf265245efae66ef63.png

八进制、十六进制 转 十进制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值