C++中&和&&、float和double的分别

1、&和&&的定义及用法的分别?
2、float f=0.4;
if(f==0.4)
cout<<"OK"<<endl;
为什么不能输出?为什么用double就可以?

本人为初学者,以上问题请用简单语言作答,有理由更好。多谢合作。
请看清题目后,答齐所有问题。

现在明确一下,是在以下程序中的分别:
int main()
{
char a=-128;
unsigned char b=127;
if(a&b)
cout<<"YES";
if(a&&b)
cout<<"NO";
system("PAUSE");
return 1;
}
请分别指出&和&&的作用以及其执行的过程。
似乎是与二进制单个位的比较与整体比较的分别。不是很清楚,希望各位在这方面作答。如果不是的话也没关系。
最新回答
逆风の蒲公英

2024-10-22 14:25:53

1.&是取地址运算法,
比如 :
int a = 3;
int *p;
p = &a;//取变量a的地址赋给p,那么p就指向了a

&也可以做位运算(主要是针对二进制),表示“按位与”运算
如果两个数相应的二进位都是1,那么该位的结果值也是1,否则为0
比如:
0&0=0,0&1=0,1&0=0,1&1=1

关于&&,这个是与运算符
真&&真 = 真
真&&假 = 假
假&&真 = 假
假&&假 = 假
要注意的是表达式做与运算
表达式1 && 表达式2
1.首先计算表达式1的值
2.如果表达式1为真,则继续计算表达式2的值
如果表达式1为假,那么整个运算式的结果为假, 不会计算表达式2的值;

2.
float f=0.4;
if(f==0.4)
cout<<"OK"<<endl;
因为float f=0.4;实际上f的值是0.40000001,并不是0.4
当进行f==0.4运算时,两数并不相等(这里的0.4其实是double类型的0.40000000000000002)

而如果是double b = 0.4;//其实b的值是0.40000000000000002
执行if(b==0.4)时,两值相等(因为这里的0.4其实是double型,值为0.40000000000000002)

其实还可以做这样一个尝试:
float f=0.236;其实f的值是0.236000000
double b = 0.236;其实b的值是0.23599999999999999
这是因为浮点型数数据的精度问题导致我们看到的和实际的数是不同的

对你补充的代码的&&和&的区别的回答:
int main()
{
char a=-128;
unsigned char b=127;
if(a&b)//这里是位运算
cout<<"YES";
if(a&&b)//这里是逻辑运算
cout<<"NO";
system("PAUSE");
return 1;
}

下面做分析:
char a=-128;
char型变量,所以a只占一个byte,即是只占8位
其实a = 1000 0000 //-128
unsigned char b=127;
无符号char型变量,b也只占一个byte,
其实b= 0111 1111 //127
1.两者做位运算的按位与运算 得a&b 值为0;
1000 0000
^0111 1111
------------
0000 0000
所以不会输出YES

2.两者做逻辑与运算
由于a = -128,不等于0,非零即为真
由于b = 127,也不等0,非零即为真
逻辑与运算是看运算符两边是否为真,现在两边非零,也就是都为真,所以结果为真
所以会输出NO
我不会写诗

2024-10-22 16:13:15

1.&是位运算符,有些语言也当逻辑运算符(与&&不同的是,所有部分都参与运算)
&&是逻辑运算符,当&&前面为false时&&后面的不进行判断
2.0.4字面值是double类型
可以其后加d或f来确认字面值类型
其中if(f==0.4f)
╰堕落的青春

2024-10-22 11:59:37

kofeffect 说的不错
你如果看过 c\c++高质量编程 就知道
判断符点型数据
应该用
if(b>0.39999999 && b<0.40000001)
风中的歌声

2024-10-22 11:21:49

int main()
{
char a=-128; //二进制10000000
unsigned char b=127; //二进制1111111
if(a&b) /*这里&是位运算符,即10000000&1111111,结果为0,即为假,此if语句不执行*/
cout<<"YES";
if(a&&b) /*&&是且,判断条件, 即a和b同为真时执行,有一个为假时不执行,因为a、b非零即为真,所以输出结果为“NO”*/
cout<<"NO";
system("PAUSE");
return 1;
}
可以这样测试程序
int main()
{
char a=1;
unsigned char b=1;
if(a&b)
cout<<"YES";
if(a&&b)
cout<<"NO";
system("PAUSE");
return 1;
}
输出结果为:YESNO
int main()
{
char a=0;
unsigned char b=0;
if(a&b)
cout<<"YES";
if(a&&b)
cout<<"NO";
system("PAUSE");
return 1;
}
无输出结果