进制之间的转换

进制之间转换需要区分正整数和负数,平常的面试当中,还没有遇到相关的问题,笔试阶段可能碰到一两个,我在这里做一个简单的整理,解决普通的问题应该绰绰有余。

目录

正整数运算
  二进制转十进制
  二进制转十六进制
  十进制转二进制
  十六进制转十进制
小数运算
  二进制与十进制
  二进制与十六进制
  十六进制与十进制
负数转换
位运算
位运算的运用

正整数运算

二进制转十进制

最后一位数是2的零次方,依次类推进行加法运算
例如:11100转十进制


二进制转十进制.png
二进制转十六进制

二进制转换为十六进制的方法是,取四合一法,即从二进制的小数点为分界线,向左(向右)每四位取成一位,如 0 0 1 1| 1 1 0 1 ,左半边=2+1=3 右半边=8+4+1=13=D,结果,00111101就可以换算成十六进制的3D。

十进制转二进制

十进制转换为二进制采用“除2取余,逆序排列”法


十进制转二进制.png
十进制转十六进制

类似十进制转二进制,不过是用16来除,如下

65036 除 16,余数12(C),商4064
4064 除 16,余数0(0),商254
254 除 16,余数 14(E),商15
15除16,余数 15(F),商0,结束
得16进制为 FE0C

十六进制转二进制

十六进制转二进制方法就是一分四,即一个十六进制数分为四个二进制数

如0x1ED转换为二进制,1即为0001,E为1110,D为1101,转为二进制:111101101

十六进制转十进制

类似二进制转十进制

例:2AF5换算成10进制:

用竖式计算:

第0位: 5 * 16^0 = 5

第1位: F * 16^1 = 240

第2位: A * 16^2= 2560

第3位: 2 * 16^3 = 8192

相加为10997

小数运算
二进制与十进制

十进制的小数转换为二进制采用“乘2取整,顺序排列”法,具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,此时0或1为二进制的最后一位。或者达到==所要求的精度==为止。然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
如:0.625=(0.101)B

0.625*2=1.25==取出整数部分1

0.25*2=0.5====取出整数部分0

0.5*2=1==取出整数部分1

再如:0.7=(0.1 0110 0110...)B

0.7*2=1.4====取出整数部分1

0.4*2=0.8====取出整数部分0

0.8*2=1.6====取出整数部分1

0.6*2=1.2====取出整数部分1

0.2*2=0.4====取出整数部分0

0.4*2=0.8====取出整数部分0

0.8*2=1.6====取出整数部分1

0.6*2=1.2====取出整数部分1

0.2*2=0.4====取出整数部分0

二进制转十进制则是小数点前同正整数运算,小数点后则是从左往右乘以二的相应负次方并递减


二进制小数转十进制.png
二进制与十六进制

同整数一分四和四合一方法。

十六进制与十进制

与二进制转换类似

负数转换

需要了解几个知识点,源码, 反码,补码
原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码
比如 00000000 00000000 00000000 00000101 是 5的 原码;10000000 00000000 00000000 00000101 是 -5的 原码。(注意,一个int类型是4字节,每个字节有8位。)
反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反
补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.
比如:10000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。 那么,补码为:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
总结:对于正数,原码=反码=补码。对于负数而言,补码=反码+1,最高位为符号为始终不变

注意:负数使用补码转换为十六进制,-5的补码为1111 1111 1111 1111 1111 11111111 1011,转换成十六进制为0xFFFFFFFB

位运算

符号 描述 运算规则
& 都为1才为1
| 非断路运算,都为0,才为0
^ 异或 两位相同取0,不同取1
~ 取反 0变1,1变0
<< 左移 各二进位全部左移若干位,高位丢弃,低位补0
>> 右移 各二进位全部右移若干位,对于无符号数(正),高位补0,有符号数(负数),各编译器处理不一样,有的补符号位(算数右移),有的补0(逻辑右移)

注意:所有参与运算的都是以补码形式进行的,结果也是补码,因此也需要将补码转换成为原码的形式存在(因为对于正数而言,原码=补码,所以我们在进行为运算的时候基本会忽略这条规则)
关于|操作,与||不同的一点是,||是断路运算
记住这个表

a|b 0 1
0 0 1
1 1 1
位运算的运用

1.清零(&)
与操作 & ,想要哪几位清零,就和那几位为0的二进制数相与
比如 a&0结果为0
2.取一个数的指定位置(&)
比如取数 X=1010 1110 的低4位,令Y的低四位为1,其余位为0,即Y=0000 1111,进行相与操作,X&Y=0000 1110的到低四位
3.判断奇偶(&)
只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数。
4.将某些位置设置为1
比如将数 X=1010 1110 的低4位设置为1,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行按位或运算(X|Y=1010 1111)即可得到。
5.翻转指定位置(^)
比如将数 X=1010 1110 的低4位进行翻转,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行异或运算(X^Y=1010 0001)即可得到
与0^值不变
6.交换两个数(^)
通常我们交换两个值都是借助第三个变量来实现的,如:tmp=A;A=B;B=tmp.我们还可以通过位异或运算来实现,原理是:利用一个数异或本身等于0和异或运算符交换律.
如:A=AB;B=AB;A=A^B

7.使一个数的最低位为0(~)
使a的最低位为0,可以表示为:a & 1。1的值为 1111 1111 1111 1110,再按"与"运算,最低位一定为0
8.乘以2或者除以2(<< >>)
在java中常用,见于ArrayList的扩容,也说明了Arraylist的扩容为什么是1.5,因为位移操作比普通的数学运算更快。

当位移大于32时,我们用32对其取余,即为移动的位数.每向左移动一位,相当于2(很好理解,原来的2的n次方相加向左移位后值变成了2的n+1次方相加了),左移32位相当一没有移动*
位移分为逻辑位移和算数位移,左移都是逻辑位移,右移分为逻辑右移和算数右移。Java算数运算中,右移符号位不变,需要在高位补1。 -2^31,原码是10000000 00000000 00000000 00000000,反码是1111111 11111111 11111111 11111111,补码为反码加一为10000000 00000000 00000000 00000000,进行左移变为0.

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

推荐阅读更多精彩内容