!与~的巧用,但不大懂

[复制链接]
2578|11
 楼主| 江陵龙少 发表于 2010-5-10 18:51 | 显示全部楼层 |阅读模式
看语句:

while(!(inkey=getno(line)));
语句1;
语句2;
...
上面语句中,inkey是unsigned char型,语句的意思是,通过调用函数getno()获得键值,
我想问的是,在这里!对字节进行操作是什么结果,与~有什么区别?例如若inkey为00H,!后是什么?如为FFH,!后是什么?
znmcu 发表于 2010-5-10 19:17 | 显示全部楼层
!是逻辑运算符。
~ 是位运算符。  仅赠予你这两句话,自已理解吧
lovewwy 发表于 2010-5-10 20:06 | 显示全部楼层
正如沙发所说,一个是非 ,一个取反
hgjinwei 发表于 2010-5-10 20:13 | 显示全部楼层
个人认为while(!(inkey=getno(line)));
并不见得比 while(0 == (inkey = getno(line)));好
 楼主| 江陵龙少 发表于 2010-5-10 20:25 | 显示全部楼层
根据上大侠的提示,分析一下:
!为逻辑运算符,运算结果,无非真和假,即非0和0,inkey为00H时,取非为真,inkey为非0时,取非为假,
多谢高手提点
lovewwy 发表于 2010-5-10 21:49 | 显示全部楼层
个人认为while(!(inkey=getno(line)));
并不见得比 while(0 == (inkey = getno(line)));好
hgjinwei 发表于 2010-5-10 20:13

我也同意。
麻辣鸭脖子 发表于 2010-5-10 23:12 | 显示全部楼层
这个简单明白
程序匠人 发表于 2010-5-10 23:40 | 显示全部楼层
!是逻辑运算符。结果是布尔量(真或假);
~ 是位运算符。结果还是维持是原来的类型。
呆板书生 发表于 2010-5-11 10:26 | 显示全部楼层
8楼似乎有误,

~ 似乎 int 的位运算符。结果是int 类型。

不过在很多应用环境里,会隐型转换为 char

但如果忽略这个,有时会出错。
linqing171 发表于 2010-5-11 12:45 | 显示全部楼层
9# 呆板书生
~对int操作后是int,对char 操作后是 char。
求知的电工 发表于 2010-5-11 13:32 | 显示全部楼层
来理解一下。。
 楼主| 江陵龙少 发表于 2010-5-11 21:34 | 显示全部楼层
本帖最后由 江陵龙少 于 2010-5-11 21:35 编辑

经过亲自在开发板上实验,得出的结果是
当inkey为00H时,!后为FFH;
当inkey为非0时,!后为00H。

虽然while(表达式),表达式只在乎真和假,即布尔量(1位),!本身对字节运算还是有结果的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

286

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部