웹마스터 팁

$i++ !== $i += 1

2003.08.04 22:23

플로렐라

에... 제목이 비교문...

무슨뜻인가 하면
변수 $i를 $i++ 를해서 1증가시키는것과
$i += 1 해서 증가시키는것이 다르다는것입니다.

음...
보통때는 값이 같죠.
그러나 인트(정수)의 한계에 가면 달라집니다.
렐카운터만들다가 안사실이고 이렇게 해보면 어떻까해서 글을 쓰는...

일단 증명을 위해 간단한소스를...

<?
// $i++ !== $i += 1
// int : -2147483648 ~ 2147483647

        $i = 2147483647;
        $j = 2147483647;

        if($i++ == $j += 1){
                echo "$i : $i == $j : $j";
        }else{
                echo "$i : $i !== $j : $j";
        }
?>

2147483647라는 수는 32비트정수의 양수의 끝이죠. (즉31비트)
덤으로 나머지 한비트는(맨앞의) 부호로써서 1이면 음수 0이면 양수입니다.
소스에 주석으로 적은것은 정수의 범위를 표현한것입니다.

일단 변수 $i와 $j를 같이 정수의 끝값으로 줍니다.
그다음 if문으로 저렇게 대입과 동시에 비교를 하게합니다.
값이 같다면 위의 결과가 다르다면 아래가 실행되겠죠.

결과는
$i : -2147483648 !== $j : 2147483648
로써 역시 다르게 나왔습니다.

자세히보면 변수 $j가 정수의 한계를 벗어났고
변수 $i는 정수의 최소값이 되었습니다.

무슨사태인가 하면...
대입문을 다르게하는것으로 상당히 다른 결과를 초래할수있다는것입니다.
php의 내부구조는 잘모르지만
++로 증가시키는것과 +1 로 증가시키는 것이 다른것같군요
그래서 ++를 쓰지않고 +1간이 쓰면 숫자를
99 9999 9999 9999까지 처리할수있죠(렐카운터는 변수를 두개써서 저수의 제곱만큼 카운터가 가능;;)
저이상을 쓰면 지수적표현으로 되서 완전히 문자열로...

C에서는 저둘이 같을지도 모르겠지만
php에서는 ++로 처리하는것만 루프를 돌게되는것같네요
--로 같은현상을 나타낼듯합니다.

이상 허접한 팁이었습니다(_ _)
제목 글쓴이 날짜
Javascript + 플래시 칼라피커 [6] 행복한고니 2004.10.08
체크박스를 이미지로 사용하기 [7] 행복한고니 2004.10.10
배열 스크립트 종합선물세트 행복한고니 2004.10.12
멀티 파일다운로드 꼼수 (새창버전) [1] 행복한고니 2004.10.14
XP2인지 체크하여 XP2일때는 팝업허용하라는 메시지 뛰워주기 [3] 아돌 2004.10.19
모든 이미지, 텍스트 링크에 점선 없애기 [5] 이강민 2004.10.25
JavaScript 구문강조 효과내기 파우링 2004.10.28
행복한고니님의 체크박스를 이미지로 사용하기를 보고... 체크박스옆에 텍스트 부치기 [2] beMax 2004.10.29
ActiveX 멀티파일업로더 입니다. [9] by風 2004.11.01
홈페이지 나갈때 새창띄우기 [2] piasol 2004.11.07
(수정)배경음악,연월일,시간, 코멘트 셋트.(AM,PM==>오전,오후 순,한국식으로 ...) [4] 민피디 2004.11.10
ActiveX 플래시 이미지캡쳐 컨트롤 iFlower [1] 덴디 2004.11.15
iFlower 윈도우리스 플래시 ActiveX 컨트롤 덴디 2004.11.16
자바스크립트 암호화 [5] 손상모 2004.11.18
로딩중인 페이지에 효과넣기 [4] LUFFY 2004.11.20
이미지 를 브라우져에서 내맘데로 옮겨두기 [8] piasol 2004.12.03
이제 미디어플레이어는 가라? 곰플레이어로 실시간으로 감상하자. [13] ⓣing★™ 2004.12.05
홈페이지를 풀스크린으로 띄우자 - 올플래시로 보이는군요. [21] Multi_Taeji 2004.12.10
마우스를 대면 이미지가 바뀐다. 롤오버 이미지 [3] 하진 2004.12.19
개판 오분전 빙고 [2] 미친개 2004.12.30