您的位置:首页 > 其它

二进制,十进制,八进制,十六进制之间的转换

2012-04-08 23:50 573 查看
计算机内部只有二进制,包括字符数据等
int i = 15; //00000000 00000000 00000000 00001111 ==> 1字节 = 8位
1Byte = 8 bit
int 有4个字节,即32位
char c = 'a'; //00000000 01000001
计算机内部使用的二进制位都是补码的形式
(此处用1个字节表示)
15:
原码00001111 ==>补码 00001111
整数的原码和补码相同
-15:
15的原码 ==>反码+1 ==> 补码
原码00001111 ==> 反码11110000 +1 ==>补码 11110001
如果用2个字节表示-15的反码
原码00000000 00001111
反码11111111 11110001
如果用3个字节表示-15的反码
原码00000000 00000000 00001111
反码11111111 11111111 11110001
以此类推
可以用System.out.println(Integer.toBinaryString(a));打印验证

int i=-1;//11111111 11111111 11111111 11111111
int i = -2147483648(int中最小的负数)//100000000 00000000 00000000 00000000

十进制是人类的习惯
计算机在输出时候根据人类习惯输出10进制
赋值的时候默认是赋值10进制

计算机默认接受10进制,自动转换为二进制数据
16进制是二进制的简写
方便人类书写和记忆
0xff -> 11111111
转换
int x = 020;//八进制 0开头
八进制==>十进制
020==>2*8+0
0120 ==> 1*8^2 + 2*8^1 + 0
01234 --> 1*8^3 + 2*8^2 + 3*8 +4

x = 0x2E;//十六进制 0x开头
十六进制 ==>十进制
x=0x2E; ==> 2*16^1 + e =46
x= 0x1234 ==> 1*16^3 + 2*16^2 + 3*16 + 4

二进制 ==> 十进制
0000 1111 ==> 1*2^3 + 1*2^2 + 1*2 + 1 =15
0100 1001 ==> 1*2^6 + 1*2^3+1 =

十进制 ==>二进制
1)除二取余
28/2 14/2 7/2 3/2 1/2 0
0 0 1 1 1 0 ==>倒序1 1100
37/2 18/2 9/2 4/2 2/2
1 0 1 0 1 ==>倒序(如果需要则前面补0) 0001 0101
2)对应权重 (简化算法)
int x =37;
32 + 4 +1
0010 0101 // 128 64 32 16 8 4 2 1
0 0 1 0 0 1 0 1
998
998 - 512 = 486 - 256 = 230 -128 = 102 - 64 = 38 -32 =6-4 =2-2 =0
1111100110 //512 256 128 64 32 16 8 4 2 1
1 1 1 1 1 0 0 1 1 0

八进制 ==> 二进制
int x = 01234;用三个二进制位表示一个八进制位
000 001 010 011 100
十六进制 ==> 二进制
int x = 0x1234; 用4个二进制表示一个16进制位
0001 0010 0011 0100

0x12345678==>0001 0010 0011 0100 0101 0110 0111 1000
二进制 ==> 16进制
0000 0111 1111 1110 ==> 0x07FE;
一般用16进制表示二进制
例x = 0x7FE ;//0000 0111 1111 1110,直接赋值则以为是八进制(因为以0开头)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: