C语言 这段代码谁能解读一下

inta;a>0?((a&1)?((a-1)/2):((a-2)/2)):-1;具体什么意思其实我的主要目的是问a>0?((a&1)?((a-1)/2):((a-2)/2... int a;
a> 0 ? ((a& 1) ? ((a- 1) / 2) : ((a- 2) / 2)) : -1;
具体什么意思
其实我的主要目的是问a> 0 ? ((a& 1) ? ((a- 1) / 2) : ((a- 2) / 2)) : -1;与a> 0 ? ((a& 1) ? ((a- 1) / 2) : a) : -1;有什么区别,不好意思,辛苦BTzjzxxx了,根据我测试的结果,结果是没有什么区别的,搞不懂源码的作者为什么要这么写,((a- 2) / 2)的值根本就没有发挥作用
展开
 我来答
BTzjzxxx
2010-10-14 · TA获得超过4534个赞
知道大有可为答主
回答量:981
采纳率:0%
帮助的人:666万
展开全部
三目运算符,A?B:C
A为一个bool变量或返回一个bool值
若A为真,则执行B
若A为假,则执行C

三目运算符和if语句等价,这里是两层的嵌套,改成if就是:
if(a>0) {
if(a&1)
(a-1)/2;
else
(a-2)/2;
} else {
-1;
}

你这里应该没有写全,应该有一个左关联参数去接受这个值,并且BC的返回值必须相同,这段代码用通俗的话说就是:
如果a>0:再看如果是奇数则a-1除以2赋给左关联参数,若a是偶数,则将a-2除以2的值赋给左关联参数
如果a≤0,则把-1赋给左关联参数

不知道你的源码具体是怎么写的,是
a=a> 0 ? ((a& 1) ? ((a- 1) / 2) : ((a- 2) / 2)) : -1;
还是另外的int b
b=a> 0 ? ((a& 1) ? ((a- 1) / 2) : ((a- 2) / 2)) : -1;?

不可能没有效果,a=6、8、10时式子返回的值分别是2、3、4,如果没有效果,除非是程序中a始终是奇数
元初晴014
2010-10-14 · TA获得超过2174个赞
知道小有建树答主
回答量:589
采纳率:0%
帮助的人:612万
展开全部
这句的意思是
a大于0吗?
如果a大于0
QQQ:执行 a = ((a&1)?((a-1)/2:((a-2)/2));

如果a不大于0
执行 a = -1;

下面解释第一种情况
a&1? 的意思是: a的最后一位是奇数吗?
如果是
执行 a = (a-1)/2;
如果不是
执行 a = (a-2)/2;
不管是不是我们都会得到一个新的a。

这之后回到QQQ部分
执行a = a;

就是这样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式