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 && 表达式21.首先计算表达式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.236000000double 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 //-128unsigned char b=127;无符号char型变量,b也只占一个byte,其实b= 0111 1111 //1271.两者做位运算的按位与运算 得a&b 值为0; 1000 0000^0111 1111------------ 0000 0000所以不会输出YES2.两者做逻辑与运算由于a = -128,不等于0,非零即为真由于b = 127,也不等0,非零即为真逻辑与运算是看运算符两边是否为真,现在两边非零,也就是都为真,所以结果为真所以会输出NO
1.&是位运算符,有些语言也当逻辑运算符(与&&不同的是,所有部分都参与运算) &&是逻辑运算符,当&&前面为false时&&后面的不进行判断2.0.4字面值是double类型 可以其后加d或f来确认字面值类型 其中if(f==0.4f)
int main() { char a=-128; //二进制10000000unsigned char b=127; //二进制1111111if(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; } 输出结果为:YESNOint main() { char a=0; unsigned char b=0; if(a&b) cout<<"YES"; if(a&&b) cout<<"NO"; system("PAUSE"); return 1; } 无输出结果