2013-09-04 1 views
1

수정 사항이 간단하고 비용이 거의 들지 않으므로 문제가되지 않습니다. 나는 액션 스크립트 3 사용uint가 for 루프를 중단시키는 이유는 무엇입니까?

... 그것이 내가 이해하지 못하는 내가 너무에 무슨 일이 일어나고 있는지 알고 싶습니다 for 또는 uint 일부 숙박 시설의 추측하고있어 나는를 뒤로 실행하는 for 루프를 설정 Vector의 요소

var limit:uint = myVector.length-1; 
for(var a:uint = limit; a >= 0; a--) 
{ 
    trace(a); 
} 

가 나는 예상대로 2, 1, 0 출력이 실행하지만 4294967295로 이동 밖으로 루프 시간까지 거기에서 카운팅을 시작하고 Error #1502을 발생합니다.

해결 방법은 uint 대신 aint으로 입력하는 것입니다. 이유는 알 수 없습니다. 확실하게 0 이상의 값을 다루므로 uint이 올바른 데이터 유형입니까?

4294967295uint의 최대 값이지만 내 계산은 어떻게됩니까?

그리고 출력이 -1이 왜 내 루프에서 갑자기 4294967295에 백업 할 전망 당신이

var myUint:uint = 0; 
trace(myUint - 1); 

을한다면?

도움이 필요하신 경우 약간의 질문과 성원에 대해 사과드립니다.

답변

4

당신은 가까이 :

은으로 코드를 변경

. 말했듯이 루프는 2, 1, 0, 4294967295를 제공합니다. uint는 음수 일 수 없기 때문입니다. 루프는 항상 a >= 0 동안 실행되고 결코 루프 상태를 깨뜨리기 위해 -1이 아니므로 루프를 계속 반복합니다.

var myUint:uint = 0; 
trace(myUint - 1); 

나는이 테스트하지만 아마 일어나는 것은 myUint는 int로 변환되고 다음 1을 감산 한 것입니다하지 않았다. 다음 코드는 이것을 확인할 수 있어야합니다.

var myUint:uint = 0; 
trace((myUint - 1) is uint); 
trace((myUint - 1) is int); 

은 INT 사용할 수있는 루프를 해결하려면 또는 인덱스 ( a)가 필요하지 않은 경우 당신은 for each(var x:Type in myVector) 루프를 사용할 수 있습니다. 이진

+0

맞아요.'myUint-1'은 실제로'int'로 타입 지정됩니다. 이것은 실제로 당신이 그것을 언급 할 때 실제로 완벽하게 이해됩니다. 출력은 특정 유형의 데이터를 사용한 계산의 결과이지만 해당 유형은 출력의 유형과 관련이 없습니다. – popClingwrap

+0

내 생각을 확인하기 위해 다시와 주셔서 감사합니다. 루프에 가능한 해결책을 제공하기 위해 내 대답을 업데이트했습니다. –

3

a가 0 일 때 a-가 발생하므로 int가 서명되지 않았으므로이 유형의 최대 값이 설정됩니다. -> 부호없는 유형에 마이너스 값이 설정되는 방식입니다.

var limit:uint = myVector.length-1; 
for(var a:uint = limit; a > 0; a--) 
{ 
    trace(a); 
} 
+0

는 A'는'때'반복이 발생한다고 일리 0 '이지만 결과가 -1로 내가 가정되는 어떠한 출력을 생성하지이 모든 문제로부터 발생하는 곳이지만,'> '대신에'>하여 해당 ='는 단지'2, 1'을 출력하고 인덱스 0의 원소는 무시합니다. – popClingwrap

1

는 - 다수의 제 BIT는 INT는 값을 뺀 것이다. UINT 값은 BIT 값입니다. 1 바이트 INT 보이는 1,111 = 127 1 바이트 UINT == 1000 0000 128 0111 1111 128 =

이 그 것이다 같다 == 1000 0000 0111 -127과 같은.

관련 문제