2016-10-07 3 views
1

주기적 시퀀스를 얻었다 최대 한계 이상 쉬프트 :내가 CodeBlocks IDE에 다음 코드를 작성하고 실행 한

main() 
{ 
unsigned char num=1; 
unsigned char i=0; 

for(i=0;i<255;i++) 
{ 
    printf("%d\n",num>>i); 
} 
} 

출력 : 1,0,0, .. (31 '0'), 1,0 .. (31 0)

모든 값은주기적인 시퀀스를 생성합니다.

한계를 넘는 변화 (num 크기의 mem 크기)는 정의되지 않은 동작이지만 왜 주기적입니까? 주기적인 순서는 당신이이 정의되지 않은 동작의 가능한 표현이기 때문에 정기적으로 할 수있어

+0

"한계 (mem 크기는 num)를 넘어서는 변화는 정의되지 않은 동작이지만 왜 주기적입니까?" 당신의 진술이 모순이라고 생각하지 않습니까? – usr

+0

Undefined = 특정 범용 논리가 없습니다. Periodic = 반복 할 때 논리를 지정할 수 있습니다. –

+1

일부 assember 32 비트 시프트 명령어는 오른쪽 연산자에 대해 5 비트 만 허용하므로'num >> i'는'num >> i & 0x1F)'. – mch

답변

4

왼쪽으로 시프트 경우에도 발생한다

.

그런 것에 의존하지 마십시오.

+0

많은 컴파일러에서 시도했다. 모든주기적인 시퀀스를 준 –

+1

나는 방금 그것을 시도했다. 컴파일러가 방금 내 고양이를 먹으려 고했습니다. (비록 내가 지금 컴파일러 벤더를 바꾸려고 생각하고 있지만 ;-)) – Bathsheba

+0

와트는 출력 되었습니까? –