2013-01-10 4 views
-1

나는 이상한 것을 발견하고 어디서나 답을 찾을 수 없다. & = 짝수를 false로 해석하는 것 같습니다. 이것에 대한 논리적 인 설명이 있습니까, 아니면 이것이 버그입니까?짝수에 false가 나온다

이 조각은 적어도 내 설정에 문제가 재생하기 :

$nums = array(1,2,3,4,5,6,7,8,9,10); 
$var1 = true; 
$var2 = true; 
foreach ($nums as $num) { 
    // Test 
    $var1 &= $num; 
    $var2 = $var2 && $num; 
    echo "$var1, $var2<br />"; 
    //Reset 
    $var1 = true; 
    $var2 = true; 
} 

시스템 : PHP 버전 5.3.10-1ubuntu3.4

답변

5

질문을 올바르게 이해하면 Bitwise AND (&)Logical AND (&&)을 혼동하는 것입니다. 아니, 그들은 동일하지 않습니다.

숫자의 이진 표현을 검사하면 비트 단위 연산이 가장 잘 이해됩니다. 여기에 짝수/홀수로 발생하는 것입니다 :

/* 1 & 0 */ 00000001b & 00000000b // 00000000b 
/* 1 & 1 */ 00000001b & 00000001b // 00000001b 
/* 1 & 2 */ 00000001b & 00000010b // 00000000b 
/* 1 & 3 */ 00000001b & 00000011b // 00000001b 

논리 연산을 위해, 당신은 단순히 피연산자의 truthiness 볼 필요가 :

1 && 0 // false -- 0 is falsy 
1 && 1 // true -- any non-zero number is truthy 
1 && 2 // true 
1 && 3 // true 
+0

의미가있다. 나는 비트 연산자와 논리적 연산자의 차이점을 안다. 나는 x = x && y에 대한 속기라고 가르쳤다. 나는 누군가를 걷어차 야한다. ... 열심히 ... 나는 이것을 수년간 사용 해왔다. . 나는 너무 어리 석다. 나는 & 다르게 행동한다, 그 기능은 무엇인가? – MaX

+0

'= &'is'= &'나는 ... $ a = & $ b는'$ a'에'$ b'에 대한 참조가 할당되었음을 의미합니다. –

0

당신이 비트를하고 숫자에있다. 이진

숫자는

1 => 0001 
2 => 0010 
3 => 0011 
4 => 0100 
5 => 0101 
6 => 0110 
7 => 0111 
8 => 1000 
9 => 1001 
10 => 1010 

당신이 수를 증가 할 때, 최하위 자리는 항상 변화하고 있음을 실현 ..., 그리고 당신이 1와 AND 연산을 것 때문에, 그것은 심지어 모양을 숫자가 거짓 일 때 0 (0000 & 10)입니다.

관련 문제