a = 5 #이진수로 101
print(~a) #bit NOT 연산 -6
print(a<<1) #이진수로 1010 왼쪽 shift
print(a>>1) #이진수로 010 오른쪽 shift
다른건 모르겠고 보수랑 shift는 볼.때.마.다. 이해가 안됨
볼 때마다 끝에는 결국 아~알겠다~~~~~ 하고 넘어가는데 다시보면 이해가 안됨.. python으로 코드짤 때 잘 안쓰기도 하고.. ... 그냥.. 평소에 잘 안쓰기도 하고요..? (저만,,안씁니까,,,,?)
하지만 이번에는 진짜 제대로 확실하게 정리하고 넘어가서 ! 다시는 ! 뒤돌아보지 않도록!
먼저 비교적 쉬운
왼쪽 시프트
- a의 이진수를 왼쪽으로 1비트씩 이동. 오른쪽에 0을 추가합니다.
- 101 << 1 = 1010 (10진수 10)
오른쪽 시프트
- a의 이진수를 오른쪽으로 1비트씩 이동. 왼쪽에 0을 추가합니다.
- 101 >> 1 = 010 (10진수 2)
여기서 진짜 이해가 안됐다...... 101을 오른쪽으로 1비트씩 이동하면 뭐 어쩌라고.. 101이 이동한다고 뭐 달라지나.. 만약에 달라지면? 제일 오른쪽에 1은 어떻게 되는건데....? ..없어진다. 없애라.!!!!!! 낭떠러지로 밀어내라
다음은 2의 보수 !!!!!!!!!!!!!!!!!!
보수가 보충해 주는 수라니요? 補數..? 2의 보수는.. Two's Complement?
몰라떠여... ㅎ.. ;ㅅ;...왜 이제서야 보였을까요 ?
일단 보수와 보수방식을 잘 구분해서 생각해주세요.
우리가 가장 익숙한 10진수에서 10의 보수 방법에서 9의 보수를 이용해보자.
45이라는 수가 있다면 9의 보수는 54다. 각 자릿수를 9로 보충해주는 수 !
10의 보수 방식에 9의 보수를 이용하는 경우
45의 10의 보수는 9의 보수(54) + 1= 55다.
9의 보수를 사용하지 않고 10의 보수를 구하는 방법
45를 예로 든다면, 45는 두자릿수이고 다음 자릿수는 100이다.
이 100에서 45를 뺀다. 그럼 10의 보수인 55가 나온다.
-> 자리 올림(carry)을 반영해야 한다는 점이 번거롭다.
이걸 그대로 2의 보수에 적용하면 된다.
반전한다는 표현은 결국 1과 0만 사용하는 2진수에서 1은 0으로, 0은 1로 1의 보수를 구하는 것과 같다.
아 그리고 python에서 결과해석을 이 2의 보수 방식을 사용해서 음수로 해석한다.
~연산자가 비트반전 후 가장앞쪽비트 0은 양수 1은 음수로 부호비트, 2의 보수 해석 적용해서 비트 반전 후 +1하고 10진수로 바꿔준다. 그럼 음수10진수 완성 !
귀찮으면..그냥.. -(n+1) 외우기 츄천...~~
'Python to AI' 카테고리의 다른 글
Decorator, Context Manager (0) | 2024.11.14 |
---|---|
Iterator, Generator (3) | 2024.11.14 |
File Objects - file mode, file method (0) | 2024.11.13 |
매직 메서드(Magic Methods), 클래스 메서드(Class Methods), 정적 메서드(Static Methods), 상속(Inheritance) (0) | 2024.11.12 |
객체지향 프로그래밍(Object-Oriented Programming, OOP), - Object, Class, Instance, Attributes, Methods (0) | 2024.11.11 |