A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘学宾 中级黑马   /  2012-10-21 13:26  /  2450 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1,     ~6的结果是7,请详细的解释一下。
2, for(;;)    {    }  
     这是最简表现形式的无限循环。他的条件表达式为空,这个条件就成立吗?换句话说,为什么此时条件为真?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

7 个回复

倒序浏览
for(;;)他的条件表达式为空,这个条件就成立,因为它没有结束的标记,会一直循环下去

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
1、 for(;;)    {    }  
    这是最简表现形式的无限循环。他的条件表达式为空,成立。不强制停止会一直运行下去!

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
~6表示对6的二进制按位取反,得到的结果是-7
就是把6的二进制:0000-0110,中的0和1互换,得到1111-1001

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 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 直到循环结束

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
第一个问题, ~为位运算符按位非(NOT)(一元运算),即二进制按位取反,6(可视为+6)的二进制为0000-0110,按位取反(即0、1互换)后为1111-1001,即-7;
第二个问题,for(;;){    }的for(;;)的三部分(分别为操作,循环终止条件,操作)都为空,即没有前后两个操作,也没有终止条件,因此该循环将会无限循环下去
,而这种情况等同于使用了while(true){},两者实际上是一个概念;

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
w129160 发表于 2012-10-21 14:18
首先纠正一下~6结果是-7 6的二进制表达方式为00000110 按~非运算符的运算规则为按位区反即0变1 1变0
这时候 ...

明白了,  谢谢。
回复 使用道具 举报
赫骏 初级黑马 2012-10-22 14:33:11
8#
for(;;)    {    }  就是无限循环的,这个是成立的 , 因为它没有结束的标记,需要停止的时候只有强制停止
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马