鱼C论坛

 找回密码
 立即注册
查看: 6188|回复: 13

&和&&的区别

[复制链接]
发表于 2013-8-28 14:05:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 1123566890 于 2013-8-28 14:33 编辑

[b]源代码
[/b]
[b]#include<stdio.h>
[/b]
void main()
{
        int a=9,b=5,c;
        c=a&&b;
        printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}

问题一:


为什么c=a&&b和c=a&b得出的结果一样啊
谁能给我说一下&和&&的区别 我知道&a是取a的地址
为什么在这里这两个的结果一样呢

问题二:

还有!运算符我知道 !1 等于0 !0等于1     为什么!2  !3也等于0呢 谁能给我解释一下 谢谢了

问题三:

顺便帮我解释一下这行代码这是源代码
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1.
程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
       的结果满足如下条件,即是结果。请看具体分析:
2.
程序源代码:
#include "math.h"
main()
{
long int i,x,y,z;
for (i=1;i<100000;i++)
  { x=sqrt(i+100);   /*x为加上100后开方后的结果*/
   y=sqrt(i+268);   /*y为再加上168后开方后的结果*/
    if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
     printf("\n%ld\n",i);
  }
}

就这一行
(x*x==i+100&&y*y==i+268)这就意思不就是&&两遍相等为0不相等为1吗 为什么这样呢




小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-28 14:15:02 | 显示全部楼层
非零则为真,零为假!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-28 14:17:20 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-28 14:25:21 | 显示全部楼层
1123566890 发表于 2013-8-28 14:17
说反了吧。。。。。。。。

没有反  非零为真零为假
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-28 14:35:21 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-8-28 14:25
没有反  非零为真零为假

!2 !3为什么也等于0呢 是不是  !后面的数字只要不是0结果全是0呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-28 14:36:24 | 显示全部楼层
1123566890 发表于 2013-8-28 14:35
!2 !3为什么也等于0呢 是不是  !后面的数字只要不是0结果全是0呢

2 3  不是零是吧 就是真
!真(非真) 你说是真还是假
真的话就是1  假就是 0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-28 14:42:38 | 显示全部楼层
问题一:
&作为双目运算符,是位运算的“与运算”,1&1==1,1&0==0,0&1==0,0&0==0;
其实&也可以当作逻辑运算符,在有些情况下&等同于&&,
不同的是,&&具有短路功能,就是说 A&&B,若A为0,则B不去执行,但是&不会这样,A&B,无论A为0还是非0,B都会去执行。
问题二:
楼上说了,0为假,非0为真。所以!2 == 0。
问题三:
楼主还是没有弄懂0和非0哪个是真哪个是假。0为假,非零都是真。
这里等号两边都相等,if里面的判断则为1,只要有一个不等就是0。

评分

参与人数 1荣誉 +10 鱼币 +10 贡献 +5 收起 理由
怡静 + 10 + 10 + 5 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-28 14:46:43 | 显示全部楼层
湮汐 发表于 2013-8-28 14:42
问题一:
&作为双目运算符,是位运算的“与运算”,1&1==1,1&0==0,0&1==0,0&0==0;
其实&也可以当作逻 ...

谢谢明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-28 14:47:42 | 显示全部楼层
本帖最后由 1123566890 于 2013-8-28 14:51 编辑
1123566890 发表于 2013-8-28 14:46
谢谢明白了

其实问题一这样解释应该更清楚一点
printf("%d",(a=2)&&(b=-2))输出应该是1
printf("%d",(a=2)&(b=-2))即:00000010 & 11111110 ,输出结果应该为2,即00000010
&为取地址运算符和位与运算符,&&为双目逻辑运算符,如a&&b当a与b均为非零时结果为1,否则为零
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-28 14:53:37 | 显示全部楼层
1123566890 发表于 2013-8-28 14:46
谢谢明白了

采纳为答案哈!

评分

参与人数 1鱼币 +1 收起 理由
1123566890 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-28 15:05:36 | 显示全部楼层
湮汐 发表于 2013-8-28 14:53
采纳为答案哈!

再哪采纳啊 还有 第三题有点不明白啊  x和y的值应该是不相等的为什么拿他们两个比较啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-28 16:16:13 | 显示全部楼层
湮汐 发表于 2013-8-28 14:42
问题一:
&作为双目运算符,是位运算的“与运算”,1&1==1,1&0==0,0&1==0,0&0==0;
其实&也可以当作逻 ...

这要加答才让新人明白易懂,多谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-29 10:30:48 | 显示全部楼层
1123566890 发表于 2013-8-28 15:05
再哪采纳啊 还有 第三题有点不明白啊  x和y的值应该是不相等的为什么拿他们两个比较啊

第三个并不是拿X 和 Y 的值来判断的
(x*x==i+100&&y*y==i+268)
我给你解释下这句话吧,先要注意运算符优先级
其实是((x*x==i+100) && (y*y==i+268))
当 (x*x的值等于 i+100 )   且     ( y*y的值等于i+268时为真),否则为假

评分

参与人数 1鱼币 +1 收起 理由
1123566890 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-29 17:18:27 | 显示全部楼层
湮汐 发表于 2013-8-29 10:30
第三个并不是拿X 和 Y 的值来判断的
(x*x==i+100&&y*y==i+268)
我给你解释下这句话吧,先要注意运算符 ...

原来&&的意思就是且啊 这次明白了 谢谢啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-5 20:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表