计算机单位转换 && 位运算 && 进制转换

一、单位转换

在计算机科学中,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 >> n。
要求A % B的话,则可使用&操作符,A&(B-1)。

如果A为负数的话,则未必成立。比如,当A为-1,B为2的时候,可知(-1)%2=-1,而-(1)&0=0。
记住,当我们把乘法,除法及取模运算转化为位运算时,都要求A>=0。

五、进制转换

5.1、二进制 与 八进制

二进制 转 八进制
八进制 转 二进制

5.2、二进制 与 十六进制

二进制 转 十六进制
十六进制 转 二进制

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

十进制 转 八进制、十六进制
八进制、十六进制 转 十进制
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 197,511评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,011评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 144,489评论 0 326
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,872评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,741评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,525评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,914评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,542评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,833评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,858评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,674评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,479评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,923评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,099评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,400评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,923评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,141评论 2 339

推荐阅读更多精彩内容