//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);
}
}
分享到:
相关推荐
Java的位运算
JAVA位运算.pdf ,深入了解java位运算
学习java编程,位运算的课件不好找。赶快下啊,系统的有根据的,美!!
java位运算大全.doc
Java位运算操作 左位移 右位移 与或非的操作
总结了一些关于,Java中常用位运行,希望能够帮助大家!
java位运算
Java 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .doc
java位运算例子,一看就懂,包含符号介绍,每个符号都有相应的例子。
(2) 取int型变量a的第k位 (k=0,1,2……sizeof(int)),即a>>k&1 (3) 将int型变量a的第k位清0,即a=a&~(1 ) (4) 将int型变量a的第k位置1, 即a=a ¦(1 ) (5) int型变量循环左移k次,即a=a ¦a>>16-k (设sizeof(int)...
java位运算.docxjava位运算.docxjava位运算.docxjava位运算.docx
介绍Java中进行位运算的基础知识,并且使用雪花算法为例进一步介绍
java基础知识点----位运算方面的一些小知识
经常项目中用到的Java的位运算相关的方法,稍微整理了下 详细介绍可参考博客 http://longshaojian.iteye.com/admin/blogs/1946865 请多指教!
可进行十六进制字符串按位异或运算,就是输入十六进制数,每个十六进制数间输入空格,然后点输出即可得到结果
Java实现四则运算,支持浮点数的连乘连除连加连减,命令行输入,命令行输出,可以连续运算。
编写一个包含主方法main的公共类(访问权限为public的类),主方法main中完成的任务是:从键盘上输入两个运算数(double 类型)和一个运算符(char 类型),使用(1)中的类输出运算结果(保留两位小数)。...
java位运算1.pdf
因为Java 使用2的补码来存储负数,并且因为Java 中的所有整数都是有符号的,这样应用位运算符可以容易地达到意想不到的结果。例如,不管你如何打算,Java 用高位来代表负数。为避免这个讨厌的意外,请记住不管高位的...
解析expression四则运算表达式 如:(1+2*3.5*(2+3)-10+18*20)