문제

내가 좋아 루프를 사용하는 UInt16(ushort)루프를 통해 그것의 모든 값입니다.그러나,이것이 그것을 하지 않:

for( ushort i = 0; i < UInt16.MaxValue; i++ )
{
    // do something
}

문제는 루프는 종료될 때 나==0xFFFF 가 아니라"뭔가".변경하는 경우'을'문 to"(ushort i=0;나 <=UInt16.MaxValue;i++)",그것은 무한 루프가되기 때문에 나는 결코 얻을 0x10000 기 때문에 ushorts 만 가 0xFFFF.

내가 만들 수 있는'나'int 고 캐스팅 또는 할당을 ushort 변수에 반복입니다.

어떤 방법이 있나요?

도움이 되었습니까?

해결책

a do...while 고리

ushort i = 0;
do
{
    // do something
} while(i++ < UInt16.MaxValue);

상단 대 하단의 테스트 루프에 대한 흥미로운 토론이 있습니다. 여기.

다른 팁

UInt16.MaxValue 평가합니다 0xffff, 아니다 0x10000. 나는 당신이 이것을 할 수 있다고 생각합니다 do/while Burkhard1979의 답변에 대한 변형으로 루프.

ushort i = 0;
do {
   ...
} while (++i != 0);

단순히 for를 do-while 루프로 교체 할 수 있습니다.

ushort i = 0;
do
{
i++;
...
} while(i!=UInt16.MaxValue);

짧아야합니까? 왜 그냥

for(int i = 0;i<=0xFFFF;i++)
{
  //do whatever
}

가정하는 코드에서 겪고 있는 한 오류가(현재 코드,정지기 전에는 최종 값을 평가합니다.다음과 같은 대답할 수도 있다.

매우 간단하다,당신의 카운터는 16bit unsigned integer,그것은 있을 수 없습 값보다 크 0xffff, 으로,그 값은 여전히 유효한,당신은 당신을 위해 필요한 값을 넘어가는 것 같습니다.그러나 추가 1 하기 0xffff 에서 16 비트이 그냥 주위를 감싸기 0.제안으로 하나,사용하는 동안 루프(을 필요로하지 않는 경비치),또는 사용하는 큰 값을 포함하는 카운터입니다.

ps.를 사용하여 16 비트 변수에 현대적인 기계입니다 실제로보다 효율적 사용 32 비트 변수로 오버 플로리 코드를 생성한다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top