黑马程序员技术交流社区

标题: 刚刚入门,有些小疑惑,关于JAVA [打印本页]

作者: 刘学宾    时间: 2012-10-21 13:26
标题: 刚刚入门,有些小疑惑,关于JAVA
1,     ~6的结果是7,请详细的解释一下。
2, for(;;)    {    }  
     这是最简表现形式的无限循环。他的条件表达式为空,这个条件就成立吗?换句话说,为什么此时条件为真?


作者: 陆建平    时间: 2012-10-21 13:53
for(;;)他的条件表达式为空,这个条件就成立,因为它没有结束的标记,会一直循环下去
作者: sun~~    时间: 2012-10-21 14:02
1、 for(;;)    {    }  
    这是最简表现形式的无限循环。他的条件表达式为空,成立。不强制停止会一直运行下去!
作者: 刘伟平    时间: 2012-10-21 14:03
~6表示对6的二进制按位取反,得到的结果是-7
就是把6的二进制:0000-0110,中的0和1互换,得到1111-1001
作者: 占琳    时间: 2012-10-21 14:18
本帖最后由 w129160 于 2012-10-21 14:26 编辑

首先纠正一下~6结果是-7 6的二进制表达方式为00000110 按~非运算符的运算规则为按位区反即0变1 1变0
这时候结果是11111001 而在计算机中是以补码的方式运行代码的
这时候我们需要把结果计算成补码
而负数的补码是最前面的1不变 其他地方0变成1,1变成0 转换之后的结果在加上1  10000110+1=10000111 这时候结果就是-7
for(变量初始化;条件判断;步进)   
{
//要执行的语句
}  
for 循环有4步
第一步、执行变量初始化
第二步、执行条件判断 如果条件为真,执行下面的语句,如果条件为假,退出循环
第三步、执行步进即变量+1或-1
第四步、重复步骤2 直到循环结束

作者: 范德农    时间: 2012-10-21 14:29
第一个问题, ~为位运算符按位非(NOT)(一元运算),即二进制按位取反,6(可视为+6)的二进制为0000-0110,按位取反(即0、1互换)后为1111-1001,即-7;
第二个问题,for(;;){    }的for(;;)的三部分(分别为操作,循环终止条件,操作)都为空,即没有前后两个操作,也没有终止条件,因此该循环将会无限循环下去
,而这种情况等同于使用了while(true){},两者实际上是一个概念;
作者: 刘学宾    时间: 2012-10-21 22:37
w129160 发表于 2012-10-21 14:18
首先纠正一下~6结果是-7 6的二进制表达方式为00000110 按~非运算符的运算规则为按位区反即0变1 1变0
这时候 ...

明白了,  谢谢。
作者: 赫骏    时间: 2012-10-22 14:33
for(;;)    {    }  就是无限循环的,这个是成立的 , 因为它没有结束的标记,需要停止的时候只有强制停止




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2