若x为int类型,请写出与!x等价的C语言表达式(x=0)?,为什么x=0?
4个回答
展开全部
C里有隐式转换,但x为int,是可以当成bool值使用,会自动转换。规律是:当x=0时
为false
x为非零值,则为true
分析一下,这个语句
x==0
从int角度分析,如果x为0
则结果
true
!x
这个表达式可以写成!((bool)x)x先转换为bool值,x为0,套用bool转换规律,即为false,而!(false)即为true
非零结果自己分析
所以得到两个在逻辑判断上等价
为false
x为非零值,则为true
分析一下,这个语句
x==0
从int角度分析,如果x为0
则结果
true
!x
这个表达式可以写成!((bool)x)x先转换为bool值,x为0,套用bool转换规律,即为false,而!(false)即为true
非零结果自己分析
所以得到两个在逻辑判断上等价
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你说的是判断语句x==0吧?分析如下:
!x:如果x非0,那么!x=0,如果x为0,那么!x=1
x==0:如果x非0,那么x==0判断为假,值为0,如果x=0,那么x==0为真,值为1
由上可知,两种表示法对x的判断效果是一样的,即等价
!x:如果x非0,那么!x=0,如果x为0,那么!x=1
x==0:如果x非0,那么x==0判断为假,值为0,如果x=0,那么x==0为真,值为1
由上可知,两种表示法对x的判断效果是一样的,即等价
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该是x==0
!x做的其实就是与0比较,看下面的代码
int
a,b=1;
a=!b;
//a=0
翻译成汇编代码:
movl
$1,
-8(%ebp)
#设置b=1
cmpl
$0,
-8(%ebp)
#b与0比较
sete
%al
#若b=0则产生中间变量1否则产生0
movzbl
%al,
%eax
#和上面一句一起产生作用呢
从上面汇编代码可以看出!b其实就是和0比较
懂了记得给分哦^_^
!x做的其实就是与0比较,看下面的代码
int
a,b=1;
a=!b;
//a=0
翻译成汇编代码:
movl
$1,
-8(%ebp)
#设置b=1
cmpl
$0,
-8(%ebp)
#b与0比较
sete
%al
#若b=0则产生中间变量1否则产生0
movzbl
%al,
%eax
#和上面一句一起产生作用呢
从上面汇编代码可以看出!b其实就是和0比较
懂了记得给分哦^_^
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询