标签:含义 tar 就会 位运算 text 逻辑 单独表 body 十六
123表示的1*(10^2) + 2*(10^1) + 3*(10^0),(10^2表示10的二次方),它表示的是各个位置数字含义之和。每个位置的数字含义与位置有关,从右向左,第一位乘以10的0次方,即1,第二位乘以10的1次方,即10,第三位乘以10的2次方,即100,依次类推。
1. 正整数的二进制表示
看一些数字的例子吧:
二进制 |
十进制 |
10 |
2 |
11 |
3 |
111 |
7 |
1010 |
10 |
2. 负整数的二进制表示
4. 给定一个负数二进制表示,要想知道它的十进制值,可以采用相同的补码运算。比如:10010010,首先取反,变为01101101,然后加1,结果为01101110,它的十进制值为110,所以原值就是-110。
3. 负整数为什么采用补码呢?
比如:1-1其实是1+(-1)。如果用原码表示,计算结果是不对的。
1 -> 00000001
-1 -> 10000001
+ ------------------
-2 -> 10000010 //用符合直觉的原码表示,1-1的结果是-2。
如果是补码表示:
1 -> 00000001
-1 -> 111111111
+ ------------------
0 -> 00000000 //结果是正确的。
再比如,5-3:
5 -> 00000101
-3 -> 11111101
+ ------------------
2 -> 00000010 //结果也是正确的。
理解了二进制加减法,我们就能理解为什么正数的运算结果可能出现负数了。当计算结果超出表示范围的时候,最高位往往是1,然后就会被看做负数。比如说,127+1:
127 -> 01111111
1 -> 00000001
+ ------------------
-128 ->10000000
计算结果超出了byte的表示范围,会被看做-128。
规律:
二进制写起来太长,为了简化写法,可以将四个二进制位简化为一个0到15的数,10到15用字符A到F表示,这种表示方法称为16进制,如下所示:
2进制 |
10进制 |
16进制 |
1010 |
10 |
A |
1011 |
11 |
B |
1100 |
12 |
C |
1101 |
13 |
D |
1110 |
14 |
E |
1111 |
15 |
F |
查看整数的二进制和十六进制表示
在Java中,可以方便的使用Integer和Long的方法查看整数的二进制和十六进制表示,例如:
int a = 25;
System.out.println(Integer.toBinaryString(a)); //二进制
System.out.println(Integer.toHexString(a)); //十六进制
System.out.println(Long.toBinaryString(a)); //二进制
System.out.println(Long.toHexString(a)); //十六进制
四、位运算
1. 移位运算:
例如:
int a = 4; // 100 a = a >> 2; // 001,等于1 a = a << 3 // 1000,变为8
2. 逻辑运算:
具体形式,例如:
int a = ...;
a = a & 0x1 // 返回0或1,就是a最右边一位的值。
a = a | 0x1 //不管a原来最右边一位是什么,都将设为1
标签:含义 tar 就会 位运算 text 逻辑 单独表 body 十六
原文地址:https://www.cnblogs.com/wslook/p/9385349.html