`

Java中的位运算(1)

    博客分类:
  • java
阅读更多

//Java中的位运算
/*计算机由复杂电子元器件构成,一个电子元器件有带电和不带电的两种状态,1和0
多个这样的元器件的组合可以表示更多状态,也就是可以表示更多的数据,
一个元器件可以表示一位(bit)数据,这种表示数据的方式称为2进制
在实际的电子设备中,将8个元器件组合在一起,形成一个单元,这样的单元叫做一个字节(byte)
一个字节能表示2^8=256个数,即0-255
2个字节能表示2^16个数,即0-2^16-1
4个字节能表示2^32个数,即0-2^32-1
一个字节(byte)由8个二进位(bit)组成,
最右边的称为最低有效位,最左边的称为最高有效位
每一个二进位的值都是0或1*/
/*在计算机中常采用16位进制的方法,因为二进制书写太长,容易出错
16进制的f代表十进制中的15,在二进制中需要4位(bit)1111来书写
16进制中的ff代表十进制的255,在二进制中需要8位(bit)11111111来书写*/
//在计算机中只有数值,可以用数值表示不同的含义,如内存的数值可代表不同的含义


//原码、反码和补码
/*原码:将最高位作为符号位(1为负,0为正),其余各位代表数值本身的绝对值(二进制表示)
以一个字节的数值为例:
+7:00000111
-7:10000111
而问题在于:
+0:00000000
-0:10000000
这样表示数值不唯一,因而在计算机中很少采用原码*/
/*反码:一个数如果为正,则它的反码和原码相同,如果为负,符号位为1,其余各位对原码取反
如:
+7的原码是:00000111
+7的反码是:00000111
-7的原码是:10000111
-7的反码是:11111000
问题还是:
+0的反码是:00000000
-0的反码是:11111111*/
/*补码:利用溢出,我们可以将减法变成加法//主要就是怎么操作、运算,使结果满足我们的需要
对于十进制,如果要从9得到结果5,我们可以用减法:
9-4=5
因为4+6=10,我们将6作为4的补数,将上式的减法改成加法:
9+6=15
去掉高位1(也就是减去10),得到结果5

对于16进制,如果从C得到结果5,我们可以用减法:
C-7=5
因为7+9=16,我们将9作为7的补数,将上式的减法改成加法:
C+9=15(十进制中21)
去掉高位1(也就是减去16),得到结果5*/
/*在计算机中,如果我们采用1个字节来表示一个数,则这个字节有8位(bit)
超过8位(bit)就进1,在内存中情况为:
1 00000000
进位1被丢弃*/
/*补码:如果一个数如果为正,则它的原码、反码和补码相同
如果一个数为负,则符号位为1,其余各位对原码取反,然后整个数加1
为了简单起见,以一个字节来表示一个整数:
+7的原码为:00000111
+7的补码为:00000111
-7的原码为:10000111
-7的补码为:11111000//第一步取反
                 +1//第二步加1
            ----
            11111001//得到结果
0的补码表示为:
+0的补码为:00000000
-0的补码为:10000000
第一步 取反:11111111
第二步 加1:100000000
第三步进位1被丢弃,得到结果00000000与+0的表示相同*/
/*已知一个负数的补码,转换成十进制数,步骤为:
1.先对各位取反
2.将其转换成十进制数
3.加上符号,再减去1
例如:11111010,最高位是1,是负数,先对各位取反,变成00000101;
转换成十进制数5,加上符号,变成-5,再减去1,变成-6*/

 

//位运算符(是对位(bit)进行运算,而不是对数值进行运算)
/*Java中有4个位运算符:
  &  按位与
  |  按位或
  ^  按位异或
  ~  按位取反
1.按位与
  01101101
&
  00110111
  ----
  00100101
结论:按位与,只有壹(1)壹(1)与操作为1
 2.按位或
   01101101
 |
   00110111
   ----
   01111111
结论:按位或,只有零(0)零(0)或操作为0
 3.按位异或
   01101101
 ^
   00110111
   ----
   01011010
结论:按位异或,只有零(0)壹(1)或者壹(1)零(0)异或操作为1
 4.按位取反
 ~ 01101101
   ----
   10010010
结论:按位取反,只要将1变成0,0变成1


//Java中的移位运算符
/*java中三个移位运算符:
左移:<<
带符号右移:>>
无符号右移:>>>
 


class count
{
public static void main(String[] argus)
{
int i1=-1;
int i2=i1<<2;
System.out.println(i1);
System.out.println(i2);
int i3=0xffffffff;
int i4=i3<<2;
System.out.println(i3);
System.out.println(i4);

}
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics