栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

进制转换,原码反码补码,位运算

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

进制转换,原码反码补码,位运算

目录

进制转换

转换十进制

十进制转换

二进制转换

转换二进制

位运算

原码_反码_补码

口诀 --重点

按位与& 按位或| 按位异或^ 按位取反~

实例


进制转换

转换十进制

二进制转十进制 : 从最低位(右边),讲每个位上的数提取出来,乘以2的(位数-1)次方,然后求和
八进制转十进制 : 从最低位(右边)开始,讲每个位上的数提取出来,乘以8的(位数-1)次方,然后求和
十六进制转十进制 : 从最低位(右边),讲每个位上的数提取出来,乘以16的(位数-1)次方,然后求和

0b110_001_100 = 0 + 0 + 4 + 8 + 0 + 0 + 128 + 256 = 396
02_456 = 6 + 40 + 256 + 1024 = 1326
0xA45 = `5 + 64 + 2560 = 2629

十进制转换

十进制转二进制 : 将该数不断除以2,直到商为0为止,然后将每部得到的余数倒过来,就是对应的二进制
十进制转八进制 : 将该数不断除以8,直到商为0为止,然后将每部得到的余数倒过来,就是对应的二进制
十进制转十六进制 : 将该数不断除以16,直到商为0为止,然后将每部得到的余数倒过来,就是对应的二进制

34 = [34/2] {0} [17/2] {1} [8/2] {0} [4/2] {0} [2/2] {0} {1} = 0_b00_100_010
131 = [131/8] {3} [16] {0} {2} = 0203
237 = [237/16] {13}{D} {14}{E} = 0xED

123 = [123/2] {1} [61/2] {1} [30/2] {0} [15/2] {1} [7/2] {1} [3/2]{1} [1]{1} = 0111 1011
678 = [678/8] {6} [84/8] {4} [10/8] {2} = 1246
8912 = [8912/16] {0} [557/16] {13} [34/16] {2} {2} = 0x22D0

二进制转换

二进制转八进制 : 将二进制的每三位一组,转成对应的八进制数即可
二进制转十六进制 : 从低位开始,将二进制数每四位一组,转成对应的十六进制数即可.

o_b11_010_101 = {3} {2} {5} = 0325
ob_1101_0101 = 0xD5

0b 011100101 = 0345
0b_001110010110 = 0x396

转换二进制

八进制转二进制 : 将八进制数的每一位,转成对应的一个三位的二进制数即可
十六进制转二进制 : 将十六禁止的每一位,转成对应的一个四位的二进制数即可

0237 = {10}{11}{111} = 1001 1111
0x23B = {0010}{0011}{1011}

01230 = 0010 1001 1000
0xAB29 = 1010 1011 0010 1001

位运算

算术右移 >> :低位溢出,符号位不变,并且利用符号位补溢出高位 本质 a / 2(n个)
算数左移 >> :符号位不变,低位补0 本质 a * 2(n个)
>>> 逻辑右移 也叫做无符号右移,运算规则是:低位溢出,高位补0

原码_反码_补码

口诀 --重点

1.二进制的最高位是符号位:0标识正数,1表示负数(口诀 0 -> 0 1 -> -)
2.正数原码,反码,补码都一样(三码和一)
3.负数的反码=它的原码符号位不变,其它位取反(0 ->1 , 1 -> 0)
4.负数的补码=它的反码+1,负数的反码 = 负数的补码 -1
5.0的反码,补码都是0
6.java没有无符号数,换言之,java中的数都是有运算符号的
7.在计算机运算的时候,都是以补码的方式来运算的
8.当我们看运算结果的时候,要看它的原码

补码运算,结果原码

按位与& 按位或| 按位异或^ 按位取反~


运算规则:
按位与&: 两位全为1,结果1,否则0
按位或|: 两位有一个为1,结果为1,否则为0
按位异或^: 两位一个为0,一个为1,结果为1,否则为0
按位取反~: 0 -> 1, 1-> 0

实例

//2|3
// 2 补码 00000000 00000000 00000000 000000010
// 3 补码 00000000 00000000 00000000 000000011
// | 00000000 00000000 00000000 00000011 正数的补码就是原码
//3
System.out.println(2|3);

//2^3
//2 补码 00000000 00000000 00000000 000000010
//3 补码 00000000 00000000 00000000 000000011
//^ 00000000 00000000 00000000 00000001
//1
System.out.println(2^3);


System.out.println(~-5);


System.out.println(13&7);


System.out.println(5|4);

System.out.println(-3^3);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1032680.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号