if(A | B) 或
if(A & B) 与
我经常是这样写的
但我看别的人程序的时候看到大多都是
if(A || B) 或
if(A && B) 与
这样写的哪个好
有什么区别

解决方案 »

  1.   

    C#中,&表示两个不同整数值的按位AND运算。 |则在两个整数之间执行按位OR运算
          &&才是bool ADN运算符 || 是bool OR运算符
      

  2.   

    http://msdn2.microsoft.com/zh-cn/library/6a71f45d(VS.80).aspxC# 运算符
      

  3.   

    http://msdn2.microsoft.com/zh-cn/library/6a71f45d(VS.80).aspx
    有说明。操作数类型不同,作用不同
      

  4.   

    &和|是位运算符
    &&和||逻辑运算符
    差别很大
      

  5.   

    & 按位与 
    | 按位或 
    ^ 按位异或 
    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); 
    }
      

  6.   

    &和| 没用过&&和|| 我的理解是 and 和 or
      

  7.   

    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 为 true
    false true 返回 false看 && 对两边都进行判断 这不是多余的吗
    我用 & 判断到false 的时候返回 false
    就可以了啊
      

  8.   

    首先if(1=2 ... 这种编译会错的,我想你的意思可能是1==2, 
    对于bool类型, & 和 && 以及 | 和 || 在结果上没有区别, 
    但是你上面可能是写反了,或者是你理解反了, & 或者 | 是要计算两边的值,
    因为它是位运算,需要将两边的表达式求值,成为bool类型才进行位运算,
    而&&或者||这种才是短路的, 这是逻辑运算,不需要求后面逻辑表达式的值.
      

  9.   

    好像说不清楚.. 
    “位运算”需要两边都是值,然后针对值的每个位进行计算, 得到结果。
    比如说 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. 所以要先求值..
      

  10.   

    if(A | B) 或
    if(A & B) 与这里是不能这样写的,要改成if(A || B) 或 or   有一个为true  就是true
    if(A && B) 与 and  两个都为true  才能是true要这么写的。