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;
}
请分别指出&和&&的作用以及其执行的过程。
似乎是与二进制单个位的比较与整体比较的分别。不是很清楚,希望各位在这方面作答。如果不是的话也没关系。

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
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-04-14
1.&是位运算符,有些语言也当逻辑运算符(与&&不同的是,所有部分都参与运算)
&&是逻辑运算符,当&&前面为false时&&后面的不进行判断
2.0.4字面值是double类型
可以其后加d或f来确认字面值类型
其中if(f==0.4f)
第2个回答  2008-04-16
kofeffect 说的不错
你如果看过 c\c++高质量编程 就知道
判断符点型数据
应该用
if(b>0.39999999 && b<0.40000001)
第3个回答  2008-04-16
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;
}
无输出结果

C++中&和&&、float和double的分别
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(...

c++中,float double区别
float和double都是C++中的浮点型数据类型,三者的区别是:1、精度是不同的。浮点类型是单精度浮点数,双类型是双精度浮点数。2、分配存储空间。c++编译器为浮点类型分配4字节,为双类型分配8字节。3、有效位的个数是不同的。Float可以提供6位有效数字,double可以提供15位有效数字。

c++中float型,double型有什么区别?什么是float型,什么是double型啊?
float在存储器中占用4字节空间,而double是8字节。float称为单精度型浮点数,double双精度浮点数。

c++中,float与double的具体区别是什么
float 的范围、精度一般都低于 double 。然后 double 是 C\/C++ 更为惯用的浮点类型。带小数点\/科学计数法书的字面量不写后缀就是 double 类型。

请问c++中double和float有什么区别?啥时候该用double,啥时候该用float...
共占内存4个字节。double双精度浮点数,小数部分13到15位,共占8个字节。所以double型能表示的范围比float型的大得多,具体各能表示多大范围的数字,我也记不清,自己上网查查。如果你觉得你用的数字可能很大,或者对小数部分要求的保留精度较高,就用double型,否则为了节约内存,用float型。

C++中float和double的区别
两者区别主要在分配存储空间和描述浮点数所拥有的有效数字位数。通常情况下:1,大多数情况下,编译器为float分配4字节,而为double则分配8字节。2,float可提供6位有效数字,而double则可以提供15位有效数字。所以在应用是需要注意定义数据的精度要求。

C++中的float和double有什么区别。
double的内存内长度是float的两倍,表达范围更大

c++中,float double区别
一、精度的区别 float为单精度,内存中占4个字节,有效数位是7位。double为双精度,占8个字节,有效数位是16位。二、指数和尾数长度的区别 float指数长度为8位,尾数长度23位。double指数长度为11位,尾数长度52位。三、取值范围的区别 float的取值范围为3.4E-38~3.4E+38。double的取值范围为1.7E...

c++中float和double有什么区别?又该如何用呢?谢了!!!
float 单精度,doubl 双精度。 表示的数值范围不同。一个占用4字节 一个占用8字节, 看情况来确定它们用的方位。

C语言中float和double的区别!
此表示形式为 float 类型提供了一个大约在 -3.4E+38 ~ 3.4E+38 之间的范围。double:双精度浮点型,此数据类型与单精度数据类型(float)相似,但精确度比float高,编译时所占的内存空间依不同的编译器而有所不同,是double float数据类型,C\/C++中表示实型变量的一种变量类型。

相似回答