java6 64位下载 -6按位非为什么是5

Java运算符优先级
结合性(与操作数)
前缀增,后缀增
前缀减,后缀减
按位非/取补运算
整数除法:取商的整数部分,小数部分去掉,不四舍五入
左移位运算符
带符号右移位运算符
无符号右移
小于或等于
大于或等于
instanceof
确定某对象是否属于指定的类
条件运算符
赋值运算符
混合赋值运算符
  1、算数运算符
    + :加法
    - :减法
    * :乘法
    / :除法
    % :取余运算
  2、关系运算符
    & :只能比较基本类型数据之间的关系,不能比较对象之间的关系。
    & : (同关系运算符&&&)
    &=: (同关系运算符&&&)
    &=: (同关系运算符&&&)
    == :若使用该运算符比较两个对象的引用(变量),则实质上是比较两个变量是否引用了相同的对象。所谓相同的对象是指,是否是在堆栈(Heap)中开辟的同一块儿内存单元中存放的对象。
  若比较两个对象的引用(变量)所引用的对象的内容是否相同,则应该使用equals()方法,该方法的返回值类型是布尔值。需要注意的是:若用类库中的类创建对象,则对象的引用调用equals()方法比较的是对象的内容;若用自定义的类来创建对象,则对象的引用调用equals()方法比较的是两个引用是否引用了同一个对象,因为第二种情况equals()方法默认的是比较引用。
    != :(同关系运算符&==&)
  3、逻辑运算符 (操作符只能是布尔类型的)
    &&
    ||
1 public class Demo {
public static void main(String[] args) {
System.out.println((!'1'||'1')+5);//编译错误
System.out.println(!5);//编译错误
System.out.println(('1'||'1')+5);//编译错误
System.out.println(1||2);//编译错误
System.out.println(5-3||4-2);//编译错误
System.out.println(5&3||4&3);//true
  4、位运算符
    ! :不可以与=联用,因为!是一元操作符;不可以对布尔类型的数据进行按位非运算
  5、移位运算符(只能处理整数运算符)
  Char、byte、short类型,在进行移位之前,都将被转换成int类型,移位后的结果也是int类型;移位符号右边的操作数只截取其二进制的后5位(目的是防止因为移位操作而超出int类型的表示范围:2的5次方是32,int类型的最大范围是32位);对long类型进行移位,结果仍然是long类型,移位符号右边的操作符只截取其二进制的后6位。
  && :若符号位为正,则在最高位插入0;若符号位为负,则在最高位插入1
  &&& :无论正负,都在最高位插入0
1 public class Demo {
public static void main(String[] args) {
// 00 0101
// 00 0010
System.out.println(5&&1);//2
// 00 1000
// 00 0100
System.out.println(8&&1);//4
System.out.println(3+5&&1);//4
System.out.println(3+(5&&1));//5
阅读(...) 评论()Java中位运算,对整数5按位取反怎么算就是~5怎么算答案是-6,按我的理解是先把5转换成二进制数,然后按位求反,结果得到的答案却不是-6啊。还有按位与,比如5&2怎么算等于0啊,请教高手_百度作业帮
Java中位运算,对整数5按位取反怎么算就是~5怎么算答案是-6,按我的理解是先把5转换成二进制数,然后按位求反,结果得到的答案却不是-6啊。还有按位与,比如5&2怎么算等于0啊,请教高手详细讲解!
5:取反:因为数在计算机里是用补码形式存放的...所以要把看做一段补码现在把补码转化为原码,第一位是符号..不用变..先变成反码..减1就可以..再变为原码,即-6 5&25::与就是各个位做与运算..1&0=00&0=01&1=1结果就是...
首先确定是8位的二进制..以10为例原码:第一个0仅仅代表这是正数...真正表示10的二进制是后7位...因为是正数..那么反码...补码..都是一样的..即如果是-10的话..首先第一位确定是1..表示是负数..这位是不变的原码是..反码是...补码是在计算机里存放的是补码.....
转二进制取反得到的也是-6你再把它转成10进制数就能看到结果了5(2) = 1012(2) = 010&是安位与,两个都是1才得1所以上面5和2对应1的位数刚好叉开了,&后得到000,也就是0了
扫描下载二维码阅读排行榜
评论排行榜JAVA中位运算与逻辑运算 - 推酷
JAVA中位运算与逻辑运算
JAVA中&&和&、||和|(短路与和逻辑与、短路或和逻辑或)的区别?&
首先名称是不同的&
&&逻辑与 ||逻辑或 它们都是逻辑运算符&
& 按位与 | 按位或 它们都是位运算符&
if(a==1&&b==2) 这是说既要满足a=1也要满足b=2&
if(a==1||b==2) 这是说或者满足a=1或者要满足b=2&
而a&b或者a|b则是二进制的与或运算&
&同为1时为1,否则为0&
|同为0时为0,否则为1&
&0101&
|0101&
&&逻辑与 也叫做短路与 因为只要当前项为假,它就不往后判断了,直接认为表达式为假&
||逻辑或 也叫做短路或 因为只要当前项为真,它也不往后判断了,直接认为表达式为真&
关于Java 中逻辑运算与位运算的区别(具体到解一道题)&
题目出自Java2实用教程(第三版)(却没有解释)&
程序如下图:&
运行结果如下:&
为什么? x,y,a,b 不是都在IF语句里都重新赋值了吗?按道理全为真了,y也该是20了吧?(用程序验证过了,的确是这个结果)&
逻辑运算符执行的是短路求值&
所谓短路,就是当参与运算的一个操作数已经足以推断出这个表达式的值的时候,另外一个操作数(有可能是表达式)就不会执行&
static boolean f1() { System.out.println( &function f1 called.& ); }&
static boolean f2() { System.out.println( &function f2 called.& ); }&
if ( false && f1() ) {} // f1不会被调用&
if ( true || f2() ){} // f2不会被调用&
由于&& 要求它的参与操作的两个操作数都是布尔值真,才得真,所以只要得出其中一个为假,那么另一部分的表达式就不会被求值(在上面的例子中是f1()不会被调用)&
同理由于||要求它的参与操作的两个操作数只要其中之一为真,就得真,所以只要得出其中一个为真,那么另一部分也不会被求值(在上面的例子中是f2()不会被调用)&
这就是逻辑操作符所谓的“短路求值”&
位操作没有这一特性,所以不管那边的值是如何,任何参与运算的表达式都会被执行求值,因此也就产生了你代码之中的结果了。&
三、Java中逻辑运算短路的理解:&
短路” 主要用于逻辑运算符中,即 “ !&& && || &这三种运算符&
短路 就是知如果左侧的表达式能确定运算后的结果,则不再计算右侧的表达式。&
如(1&2)&&(2&3)&& 明明左侧已经为假 了&& ,我 不用计算右侧我一定知道 此表达是为假,这样 就好似物理中的电流,当某处短路时,电流直接从一条路通过,而不再管另一条路。&
================================================================================
&源码中: &&
// 本来可以简单地写成head-1,但如果head为0,减1就变为-1了,和elements.length - 1进行与操作就是为了处理这种情况,这时结果为elements.length - 1。
elements[head = (head - 1) & (elements.length - 1)] =
简单点说:内存中有16位,分为高8位和低8位
255:11111
xxx: 10101
其作用是对低位清零,保留高位,或者是查看是否有进位,这都是些底层的东西,你想了解更多,可以先了解汇编语言。
正常编程时不需要这么写,如果你非要这么写,会影响你编程的速度,但是会极大的提高程序运行的速度。
(要知道“加减乘除”最终都要被转换为“与或非”)
&================================================================================
JAVA位预算:
&1&.在了解位移之前,先了解一下正数和负数的二进制表示形式以及关系:
举例15和-15:
15 的原码: 00 &
&&& 补码: 11
&&&&&&&&&&&&&&&& +1 =&
-15的原码:11
负数的原码即为:正数的原码取反,再加1。
:(只针对 int类型的数据有效,
中,一个int的长度始终是32位,也就是4个字节,它
的都是该整数的二进制数).也可以作用于以下类型,即 byte,short,char,long(当然,它们都是整数形式)。当为这四种类型是,JVM先把它们转换成int型再进行
&&&&&& 左移&&&
&&&&&& 右移
&&&&&& 无符号右移
&& 和&&为数值位移,&&&为逻辑位移。【注】:
中不存在&&&。
m&&n的含义:把整数m表示的二进制数左移n位,高位移出n位都舍弃,低位补0.& (此时将会出现正数变成负数的形式)
& 3&&2剖析:
& 3二进制形式: 00 ,按照$1的原理,得到00 ,即为12.&
& 左移使整数变为负数:
& 二进制表示形式:11 ,按照$1的原理,得到10 ,即为:-.
m&&n的含义:把整数m表示的二进制数右移n位,m为正数,高位全部补0;m为负数,高位全部补1.
& 3&&2剖析:
& 3二进制形式: 00 ,按照$2的原理,得到00 ,即为0.
& -3&&2剖析:
& -3二进制形式: 11 ,按照$2的原理,得到11 ,即为-1.
以上:每 个整数表示的二进制都是32位的,如果右移32位和右移0位的效果是一样的。依次类推,右移32的倍数位都一样。
备注:对于右移32位
右移0位是结果是一样的,我一直不能够理解。现在我只能理解为32比较特殊。相当于整体全移。
移0位相同。左移也是一样的。
m&&&n:整数m表示的二进制右移n位,不论正负数,高位都补零。
& 3&&&2剖析:
& 3二进制形式: 00 ,按照$3的原理,得到00 ,即为0.
& -3&&&2剖析:
& -3二进制形式: 11 ,按照$3的原理,得到11 ,即为.
【注】:对于$1,$2,$3,如果n为负数:这时JVM会先让n对32取模,变成一个绝对值小于32的负数,然后再加上32,直到 n 变成一个正数。
&& 4的二进制形式:00 对32取模再加上32,不用说了,得到22,则4&&-10,即相当于4&&22。
&& 此时按照再按照$1原理,得到00 ,得到的即为:。
OK, 大功告成。
&& m&&n即在数字没有溢出的前提下,对于正数和负数,左移n位都相当于m乘以2的n次方.
---------------------------------------------------------------------------------
接 下来在此说说
的好处,速度超快,这些都是底层的二进制机器
& 比如:a*2,
&&&&&& 1.jvm先为变量a分配空间;
&&&&&& 2.再进行a*2的
&&&&& 3.再把结果返回给相应的变量。
而 a&&1,和a*2一样,它只需要一条指令即可,速度很快。当然前三种位移
都是对2的倍数
再 进行些许补充,谈到位
,当然还要说到四个
符:~(按位非),|(按位或),&(按位
),^(按位异或),这些都是大学 计算机基础用法,对整数的二进制形式进行
转换为整数,具体
1.~(按位非):【解义】对该整数的二进制形 式逐位取反。
&&& ~4:(一元
&&&& 4的二进制形式为:00 ,逐位取反后得
到:11 ,即为-5.
2.| (按位或):【解义】对两个整数的二进制形式逐位进行逻辑或运算,原理为:1|0=1,0|0=0,1|1=1,0|1=1
&&& 4|-5:
&&&& 4的二进制形式为:00 ,
&&& -5的二进制形式为:11 ,
& 逐位进行逻辑或运算:11 ,即得到-1.
):【解义】对两个整数的二进制形式逐位进行逻辑
&运算,原理:1|0=0,0|0=0,1&1=1;0&1=0等。&&
&&&& 4的二进制形式为:00 ,
&&& -5的二进制形式为:11 ,
& 逐位进行逻辑
运算:00 ,即得到0.&&
实际应用:可以把字节转换为整 数,-64&0xFF=192,也可以用八进制的形式,-64&、
其实0xFF和0377都表示的是整数255、
4.^(按 位异或):【解义】对两个整数的二进制形式逐位进行逻辑异或运算,原理:1^1=0,1^0=1,0^1=1,0^0=0.
&&&& 4的二进制形式为:00 ,
&&& -5的二进制形式为:11 ,
逐位进行逻辑异或运算:11 ,即得到-1.
实际应用:按位异或可以比较两个数字是否相等,它利用 1^1=0,0^0=0的原理。& 20^20==0
转自:/blog/615658
关于二进制一些说明:
关于负数的二进制表示方法
今天知道了对于负数的二进制方法的表示方法:例如 -5&&&
第一步:首先要把5变成101的二进制形式
第二步:再者就是按位取反,(形 成前面全是1)010
第三步:在最后加1 形成:11
反过来如果把 最高位是1的二进制变成负的整形时
第一步:位取反,变成00
第二 步:在最低位加上1,形成101
第三步:形成整形5 ,在加上负号;
中怎么用代码实现二进制于十进制的转化
public int binaryInToInt(String str)
&&&&&&&&&&&& int j=0,i=0;
&&&&&&&&&&&
&&&&&&&&&&& for(i=0;i&str.length();i++)
&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&& if(str.charAt(str.length()-i)=='1')
&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& j=j+exp(2*ln(str.length()-i));
&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&& }
http://blog.csdn.net/zdp5528/archive//2278719.aspx
(1)正负表示方法
用字节的最高位表示:&1&表示&正&,&0&表示&负&
(2)计算机中数字是以哪个码储存的?
(3) 负数 的二进制补码转换成十进制的方法
1、把补码“取反”(把二进制数的各位“1”换“0”,“0”换“1”。比如“101010”取反后为“010101”)
2、把取反后的二进制数“加1”
3、最后用常规的方法把“加1”后的二进制数转换为十进制数
将负数转换为二进制
http://blog.csdn.net/onewalkingman/archive//3746154.aspx
我们已经知道计算机中,所有数据最终都是使用二进制数表达。
我们也已经学会如何将一个10进制数如何转换为二进制数。
不过,我们仍然没有学习一个负数如何用二进制表达。
比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为:
5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。
现在想知道,-5在计算机中如何表示?
在计算机中,负数以其正值的补码形式表达。
什么叫补码呢?这得从原码,反码说起。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
是 5的 原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
指:原为1,得0;原为0,得1。(1变0; 0变1)
比如:将00 每一位取反,得11 。
反码是相互的,所以也可称:
互为反码。
补码:反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
的反码是:11 。
那么,补码为:
所以,-5 在计算机中表达为:11 。转换为十六进制:0xFFFFFFFB。
再举一例,我们来看整数-1在计算机中如何表示。
假设这也是一个int类型,那么:
1、先取1的原码:00 1 11110
2、得反码:&&&& 11
3、得补码:&&&& 11
可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF
补码:反码加1称为补码。
一个负二进制转为十进制
第一步:减1 变为11 (二进制,第一位不足时从第二位第一也为2)
第二步:取反 00
根据常用方法转为十进制.最后要加-号
中的~按位非
1二进制为 00
~1为:&&&&&&& 11
首位为1说明此数为-根据上面的计算方法,即可以计算出结果。
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
排版有问题
没有分页内容
视频无法显示
图片无法显示JAVA 按位非运算_百度知道
JAVA 按位非运算
~运算规则是按位取反,那~19就是101100,也就是-12?19二进制码是010011,为什么啊定义int a = 19 。可结果却是-20,为什么输出~19是-20
提问者采纳
即-20,换算为原码为是这样的,19的二进制码应写8位的,懂没,此时仍为补码: 按位取反为,位运算都是补码运算的
其他类似问题
69人觉得有用
为您推荐:
java的相关知识
其他1条回答
101100是补码的形式,也就是计算机存储的格式,也就是补码转换成十进制就是符号位不变其他位按位取反加1.
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 java随机生成6位数字 的文章

 

随机推荐