[정보처리기사] 파이썬 Range 시프트문제
본문 바로가기

컴퓨터공부/Python

[정보처리기사] 파이썬 Range 시프트문제

by Life & study 2023. 6. 25.
반응형

[정보처리기사] 파이썬 range ( 초기값, 최종값, 증가값) 의 이해도,

 
파이썬 range ( 초기값, 최종값, 증가값) 의 이해도,
양수 일때,
1.
range ( 초기값, 최종값, 증가값) 의 이해도
0 , 11 ,2 이라면
 최종값 - 1 해서 
0 ,  10  ,2
 
출력값
0 2 4 6 8 10
 



음수 일때,
1.
range ( 초기값, 최종값, 증가값) 의 이해도
10  ,-1, 2 이라면
 
최종값이 음수일때 -1 에서  -> +1로 변경되서 
10 ,   0  ,-2         로 변경
 
출력값
10 8 6 4 2 0

 


만일, 이런 계산문이 있다.
 

a = 100

# i 값에 대해 -1부터 2까지 반복합니다.
for i in range(-1, 3):
    # 각각의 i에 대해 a에 오른쪽 시프트 연산 (>>)을 적용합니다.
    result = a >> i

print ( result ) ;
a = 100

# i 값에 대해 -1부터 2까지 반복합니다.
for i in range(-1, 3):
    # 각각의 i에 대해 a에 오른쪽 시프트 연산 (>>)을 적용합니다.
    result = a >> i

    # 100의 이진 표현은 0b1100100입니다. 정수를 이진수로 변환합니다.
    binary_a = bin(a)[2:]  # "0b" 접두어 제거

    # 결과 값을 이진수로 변환합니다.
    binary_result = bin(result)[2:]  # "0b" 접두어 제거

    # 각 단계에서 현재 i 값과 계산 결과를 출력합니다.
    print(f"i={i}, a={a}({binary_a}), result={result}({binary_result})")

 
음수 양수 계산방법,
 

i=-1, a=100(1100100), result=200(11001000)
i=0, a=100(1100100), result=100(1100100)
i=1, a=100(1100100), result=50(110010)
i=2, a=100(1100100), result=25(11001)

 
a = 100

# i 값에 대해 -1부터 2까지 반복합니다.
for i in range(-1, 3):
    # 각각의 i에 대해 a에 오른쪽 시프트 연산 (>>)을 적용합니다.
    result = a >> i
 
에서 
만일  range(-1 이다.
 
기존의 a = 100 의 값을 2진수로 변경한다.
i=-1이므로 뒤에 오른쪽 0을 하나 더 붙인후 10진수로 변경해서 값을 출력한다.
 
i= 0이므로 뒤에 값을 안붙이고 그대로 출력한다.
 
i= 1 이므로 (a=100의 값을 2진수로 변경한값)에서 끝에 1개 자리수를 삭제한다
 


 

파이썬는 4바이트 , 4바이트와 32비트의 관계는 무엇인가?

 
1바이트는 8비트이다.
1바이트 = 00000000 비트이다.
4바이트는 32비트이다.
4바이트는 00000000, 00000000 , 00000000 , 00000000 이다.
 
 

정리, 파이썬 오른쪽 쉬프트  일때,        

정리,

a = 100

# i 값에 대해 -1부터 2까지 반복합니다.
for i in range(-1, 3):
    # 각각의 i에 대해 a에 오른쪽 시프트 연산 (>>)을 적용합니다.
    result = a >> i

 
오른쪽 시프트 연산 (>>)
 
오른쪽>>시프트일때 ,

range ( 초기값, 최종값, 증가값)
(최종값)-1 을 하고

오른쪽>>시프트일때 ,

오른쪽으로 밀려서 끝에 자리수가 삭제된다로 이해

i= -1이면, 반대로 2진수 자릿수 끝에 0을 추가한다.
i=-1, a=100(1100100), result=200(11001000)

i= 0이면, 2진수 그대로 출력한다.

i= 1이면, 반대로 2진수 자릿수 끝에 1숫자를 1삭제한다.

i= 2이면, 반대로 2진수 자릿수 끝에 2숫자를 2삭제한다.

i=-1, a=100(1100100), result=200(11001000)
i=0, a=100(1100100), result=100(1100100)
i=1, a=100(1100100), result=50(110010)
i=2, a=100(1100100), result=25(11001)


 
 파이썬 왼쪽 쉬프트  일때,
왼쪽<<시프트일때 ,

왼쪽으로 밀려서 끝에 자리수가 밀려서 추가된다.

range ( 초기값, 최종값, 증가값)
(최종값)-1 을 하고


i= -1이면, 반대로 2진수 자릿수 끝에 삭제된다.
i=-1, a=100(1100100), result=50(110010)

i= 0이면, 2진수 그대로 출력된다.

i= 1이면, 반대로 2진수 자릿수 끝에 1추가된다.
i=1, a=100(1100100), result=200(11001000)

i= 2이면, 반대로 2진수 자릿수 끝에 2추가된다.
i=2, a=100(1100100), result=400(110010000)


i=-1, a=100(1100100), result=50(110010)
i=0, a=100(1100100), result=100(1100100)
i=1, a=100(1100100), result=200(11001000)
i=2, a=100(1100100), result=400(110010000)
 

최종 정리, 파이썬 오른쪽 시프트 연산 (>>), 왼쪽<<시프트일때 ,

최종 정리,


문제,

a = 100

# i 값에 대해 -1부터 2까지 반복합니다.
for i in range(-1, 3):
    # 각각의 i에 대해 a에 오른쪽 시프트 연산 (>>)을 적용합니다.
    result = a >> i

오른쪽 시프트 연산 (>>)
 
오른쪽>>시프트일때 ,

range ( 초기값, 최종값, 증가값)
(최종값)-1 을 하고

오른쪽>>시프트일때 ,

오른쪽으로 밀려서 끝에 자리수가 삭제된다로 이해

i= -1이면, 반대로 2진수 자릿수 끝에 0을 추가한다.
i=-1, a=100(1100100), result=200(11001000)

i= 0이면, 2진수 그대로 출력한다.

i= 1이면, 반대로 2진수 자릿수 끝에 1숫자를 1삭제한다.

i= 2이면, 반대로 2진수 자릿수 끝에 2숫자를 2삭제한다.

i=-1, a=100(1100100), result=200(11001000)
i=0, a=100(1100100), result=100(1100100)
i=1, a=100(1100100), result=50(110010)
i=2, a=100(1100100), result=25(11001)

 
※오른쪽으로 한칸이 밀려서 끝자리가 삭제가 되서 2진수를 값을 표시한다.


왼쪽 정리,
 

a = 100

# i 값에 대해 -1부터 2까지 반복합니다.
for i in range(-1, 3):
    # 각각의 i에 대해 a에 왼쪽 시프트 연산 (<<)을 적용합니다.
    result = a << i



왼쪽<<시프트일때 ,

왼쪽으로 밀려서 끝에 자리수가 밀려서 추가된다.

range ( 초기값, 최종값, 증가값)
(최종값)-1 을 하고


i= -1이면, 반대로 2진수 자릿수 끝에 삭제된다.
i=-1, a=100(1100100), result=50(110010)

i= 0이면, 2진수 그대로 출력된다.

i= 1이면, 반대로 2진수 자릿수 끝에 1추가된다.
i=1, a=100(1100100), result=200(11001000)

i= 2이면, 반대로 2진수 자릿수 끝에 2추가된다.
i=2, a=100(1100100), result=400(110010000)


i=-1, a=100(1100100), result=50(110010)
i=0, a=100(1100100), result=100(1100100)
i=1, a=100(1100100), result=200(11001000)
i=2, a=100(1100100), result=400(110010000)
 
※왼쪽으로 한칸이 밀려서 끝자리가 추가 되서 2진수를 값을 표시한다.
 
 

반응형

댓글