|M| 判断符号 | 和|| 有什么样的区别 & && if(A | B) 或if(A & B) 与我经常是这样写的但我看别的人程序的时候看到大多都是if(A || B) 或if(A && B) 与这样写的哪个好有什么区别 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 C#中,&表示两个不同整数值的按位AND运算。 |则在两个整数之间执行按位OR运算 &&才是bool ADN运算符 || 是bool OR运算符 http://msdn2.microsoft.com/zh-cn/library/6a71f45d(VS.80).aspxC# 运算符 http://msdn2.microsoft.com/zh-cn/library/6a71f45d(VS.80).aspx有说明。操作数类型不同,作用不同 &和|是位运算符&&和||逻辑运算符差别很大 & 按位与 | 按位或 ^ 按位异或 1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。 按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。 main(){ int a=9,b=5,c; c=a&b; printf("a=%d\nb=%d\nc=%d\n",a,b,c); } 2. 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。 例如:9|5可写算式如下: 00001001|00000101 00001101 (十进制为13)可见9|5=13 main(){ int a=9,b=5,c; c=a|b; printf("a=%d\nb=%d\nc=%d\n",a,b,c); } 3. 按位异或运算 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12) main(){ int a=9; a=a^15; printf("a=%d\n",a); } &和| 没用过&&和|| 我的理解是 and 和 or x && y对应于操作x & y不同的是,如果 x 为 false,则不计算 y(因为不论 y 为何值,“与”操作的结果都为 false)。这被称作为“短路”计算。不能重载条件“与”运算符,但常规逻辑运算符和运算符 true 与 false 的重载,在某些限制条件下也被视为条件逻辑运算符的重载。-----------------------------但我还是不能理解为什么大家都用 && 比如我以下判断if(1=2 & 1=1) //我一直都是这样写的我们这里程序要的是判断 1=2 和 1=1 都为"true"如果照上面说的那么他先判断 1=2 因为这里为"false" 所以程序结果为false 而不再去计算1=1 的结果了如果用if(1=2 && 1=1) //这是我看大家都是这样写的照上面说的这里先判断 1=2 为 false再判断 1=1 为 truefalse true 返回 false看 && 对两边都进行判断 这不是多余的吗我用 & 判断到false 的时候返回 false就可以了啊 首先if(1=2 ... 这种编译会错的,我想你的意思可能是1==2, 对于bool类型, & 和 && 以及 | 和 || 在结果上没有区别, 但是你上面可能是写反了,或者是你理解反了, & 或者 | 是要计算两边的值,因为它是位运算,需要将两边的表达式求值,成为bool类型才进行位运算,而&&或者||这种才是短路的, 这是逻辑运算,不需要求后面逻辑表达式的值. 好像说不清楚.. “位运算”需要两边都是值,然后针对值的每个位进行计算, 得到结果。比如说 false | true 会将 true 转为 00000000 00000000 00000000 00000001, false 转为 00000000 00000000 00000000 00000000, 进行位运算, 得到00000000 00000000 00000000 00000001这个再转成bool类型,变成true,就是说位运算关心后面表达式的值是 00000000 00000000 00000000 00000001 或者是 00000000 00000000 00000000 11111111. 所以要先求值.. if(A | B) 或if(A & B) 与这里是不能这样写的,要改成if(A || B) 或 or 有一个为true 就是trueif(A && B) 与 and 两个都为true 才能是true要这么写的。 fckeditor 上传图片时怎么把路径传到数据库里 GridView1点删除 数据删除了 但是提示 必须声明标量变量 "@id"。 在线等谢谢各位高手了.. 求大神帮忙,Global.asax 中Timer的问题。。 怎么样让光标移动到Datagrid中时变成小手形? 一个复杂的数据流问题,很头痛。。。。 asp.net中的span 好心人给个WEB 控件编写的例子,设置要显示图片的path 控件显示图片 关于遮挡层? showModalDialog問題 怎样删除服务器端的文件 高分求教 求ASP.NET操作word实例。。。。。100分
&&才是bool ADN运算符 || 是bool OR运算符
有说明。操作数类型不同,作用不同
&&和||逻辑运算符
差别很大
| 按位或
^ 按位异或
1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。
main(){
int a=9,b=5,c;
c=a&b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}
2. 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如:9|5可写算式如下: 00001001|00000101
00001101 (十进制为13)可见9|5=13
main(){
int a=9,b=5,c;
c=a|b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}
3. 按位异或运算 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)
main(){
int a=9;
a=a^15;
printf("a=%d\n",a);
}
对应于操作x & y
不同的是,如果 x 为 false,则不计算 y(因为不论 y 为何值,“与”操作的结果都为 false)。这被称作为“短路”计算。不能重载条件“与”运算符,但常规逻辑运算符和运算符 true 与 false 的重载,在某些限制条件下也被视为条件逻辑运算符的重载。
-----------------------------
但我还是不能理解为什么大家都用 &&
比如我以下判断
if(1=2 & 1=1) //我一直都是这样写的
我们这里程序要的是判断 1=2 和 1=1 都为"true"
如果照上面说的
那么他先判断 1=2 因为这里为"false"
所以程序结果为false 而不再去计算1=1 的结果了
如果用
if(1=2 && 1=1) //这是我看大家都是这样写的
照上面说的这里先判断 1=2 为 false
再判断 1=1 为 true
false true 返回 false看 && 对两边都进行判断 这不是多余的吗
我用 & 判断到false 的时候返回 false
就可以了啊
对于bool类型, & 和 && 以及 | 和 || 在结果上没有区别,
但是你上面可能是写反了,或者是你理解反了, & 或者 | 是要计算两边的值,
因为它是位运算,需要将两边的表达式求值,成为bool类型才进行位运算,
而&&或者||这种才是短路的, 这是逻辑运算,不需要求后面逻辑表达式的值.
“位运算”需要两边都是值,然后针对值的每个位进行计算, 得到结果。
比如说 false | true
会将 true 转为 00000000 00000000 00000000 00000001,
false 转为 00000000 00000000 00000000 00000000,
进行位运算, 得到00000000 00000000 00000000 00000001
这个再转成bool类型,变成true,
就是说位运算关心后面表达式的值是 00000000 00000000 00000000 00000001 或者是 00000000 00000000 00000000 11111111. 所以要先求值..
if(A & B) 与这里是不能这样写的,要改成if(A || B) 或 or 有一个为true 就是true
if(A && B) 与 and 两个都为true 才能是true要这么写的。