binary 관련 간단한 정리

정수표현

정수타입에서 대부분 최상위 비트(Most Siginificant Bit)가 음수인지 정수인지를 구분한다는 것은 알고있을 것 이다. 나도 그냥 그렇게만 알고 음수표현은 양수에서 최상위 비트만 반전되는줄 알고 있었다. (하지만 그게 아니다..)

그러다 학교에서 친구가 파이썬에서 ‘~’ 가 뭐냐고 물어봐서 not이라고 대답해 주다가 이상한 부분을 발견했다. 0b101 을 not연산을 하게 되면 -0b110이 나오는 이상한 일이 일어난거다.

5 : 0b0101
!5 : 0b1010
내 생각으로는 최상위 비트가 1이고 나머지가 정수라면 -2가 되야한다고 생각했지만 음의 정수는 그렇게 표현하지 않는다.


source code

0을 0b0000으로 두고 -1부터는 0b000에서 1을 뺀 0b1111이 되는 방식이였다. 별거 아니지만 왜 정수형에서 대부분 양수만 설명하고 음수가 어떻게 되는지는 설명 안되어있어서 정리해 두었다.


binary 뺄셈

우리는 일반적으로 뺄셈을 계산할 때 7 -2 = 5 라고 계산한다. 하지만 CPU는 단순한 일 즉 덧셈만 할 수 있다. 우리가 하는 곱셈 나눗셈 등등 많은 일들도 모두 cpu는 덧셈으로 동작시킨다. 그렇기 때문에 7 - 2를 7 + (-2)로 바꿔서 계산해야 한다. 덧셈으로 뺄셈을 하는 방법은 두 가지가 있다.

1의 보수(One’s Complement)

7 - 2 
7  = 0b0111
2  = 0b0010

1의 보수에서는 먼저 음수가 될 수를 반전(Bit flip)시킨다.

2  = 0b0010
!2 = 0b1101

그 후 7과 더해준다

7  = 0b0111
!2 = 0b1101
------------
올림수(Carry) 0b1 | 결과 0b0100

지금과 같이 올림수가 나왔을 경우 2^0자리에 다시 더해준다

0b0100
0b0001
--------
0b0101 = 5

1의 보수를 이용하여 덧셈을 이용하여 뺄셈을 하였다. 1의 보수는 not연산을 통해 구해진다. 그래서 파이썬 같은 프로그래밍 언어들의 not 연산자의 영문 설명을 보면 bit flip or complement라 적혀있다.


2의 보수(Two’s Complement)

1의 보수는 올림수가 발생할 경우 계산이 복잡해진다. 이런 복잡함을 완화하기 위해 2의 보수를 사용하기 시작했다. signed와 unsigned의(쉽게 얘기하자면 부호 구분을 하는지 안하는지) 구분없이 덧셈 뺄셈이 가능하고 CPU구현도 간단해서 요즘 사용되는 CPU대부분은 2의 보수를 사용한다.
2의 보수는 계산을 할때 음수로 만들 수를 1의 보수(not연산)로 만든다음 1을 더해준다.

7  = 0b0111
!2 = 0b1101
!2 + 1 = 0b1110 = -2 in binary

0b0111
0b1110
-------
0b0101 = 5 (올림수는 버린다)

2의 보수를 만들게 되면 위에서 알아본 2진수로 음수를 표현하는 방식 그대로가 된다.


‘!’연산자와 ‘~’연산자 차이점

‘!’ 와 ‘~’ 모두 찾아보면 not operation을 수행한다고 나와있다.
하지만 둘에는 큰 차이점이 있는데 비트연산을 할 때는 ‘~’논리연산을 할 때는 ‘!’을 쓴다. 어떤 차이점이냐면.. 0b0111 이런 비트에 관한 연산을 할 때는 ‘~’을 쓰고 true false 와 같은 논리적인 것들에 대한 연산을 할 때에는 ‘!’연산자를 쓴다.
bitwise operator and logical operator

도움을 주신 이경문 멘토님 감사합니다

저작자 표시 비영리 변경 금지
신고
Creative Commons License
Creative Commons License

WRITTEN BY
Jen6
jen6의 개발, 보안 블로그 까끔가다 쓸대 있는걸 올리려고 노력중

받은 트랙백이 없고 , 댓글이 없습니다.
secret

애플은 왜 아이폰7에서 이어폰잭을 뻇을까? 기사
이번 아이폰7에서 3.5파이 이어폰 단자가 빠졌다. 언젠간 없어질 부분이라 생각했었는데 솔직히 좀 빨리 빼서 놀랐다.
개인적으로 이어폰 단자가 없어진 이유는 크게 두 가지로 본다.

  1. 디자인 철학
    예전부터 애플의 디자인에서 가장 빨리 없어지는건 ‘선’들 이였다.
    데스크탑용도로 쓰이는 아이맥에도 무선랜 포트를 넣었고 키보드와 마우스(혹은 트랙패드) 모두 무선이다. 심지어 타임캡슐을 이용한 백업도 모두 무선으로 진행된다. 이런 번잡스러운 선을 없앰으로서 애플 디자인의 최대 철학인 “단순함”을 살리고 있다.
    (에어팟 자체 모양은 좀 별로긴 하다..)

  2. 좋은 제품을 만들기 위해
    애플은 신기술 도입에 망설설지 않아왔다. 그 결과 애플이 과감하게 들여온것들은 관련 기술의 발달과 사용자들의 변화를 이끌어왔다. 예를 들자면 아이폰과 같은 모바일 기기에서 플래시를 제한하자 html5등 현대적인 웹들이 발전했고 usb c type도 맥북에 도입하게 되면서 다른 제조사 노트북에 들어가기 시작했다. 앱스토어야 말한것도 없고.. 충전하면서 노래를 못듣는 불편함을 알면서도 굳이 뺀 이유는 소비자들에게 좋은 제품을 주고싶어서가 아닐까 생각된다. 아직 무선이어폰이 조금 더 불편할 뿐이지 앞으로 유선이어폰에게 더 뒤쳐질 이유는 분명히 없다. 위글에 나온 말처럼 몇년뒤에는 우리가 왜 그렇게 이어폰 잭에 집착했을까 라고 생각할것 같다는 기분이 든다.
    더 좋은 제품을 제공하기 위해 기존에 것을 뺸다느건 스티브 잡스가 예전에 연설한 동영상을 보면 어떤 의도인지 알 수 있다.

에어팟에서 들어간 자동페어링이나 빼면 노래가 멈추는 듯한 기능들은 기존의 무선이어폰 제조사들에게 이렇게 만들어라 하는 가이드라인이 될정도로 기능적인 면은 잘 만든것 같기도 한데 디자인은 좀…

아무튼 수능 끝나면 이번에는 아이폰7 사봐야지

저작자 표시 비영리 변경 금지
신고
Creative Commons License
Creative Commons License

'etc' 카테고리의 다른 글

왜 애플은 이어폰잭을 뺏을까?  (0) 2016.09.16
NSA HACKED!  (0) 2016.08.16
필기  (0) 2014.03.06

WRITTEN BY
Jen6
jen6의 개발, 보안 블로그 까끔가다 쓸대 있는걸 올리려고 노력중

받은 트랙백이 없고 , 댓글이 없습니다.
secret

NSA HACKED!

etc 2016.08.16 09:01

오래간만에 일찍 일어난 아침부터 엄청난 소식
stuxnet, duqu, flame 의 배후로 지목된 Equation Group이 해킹당했다.
참고로 Equation Group은 카스퍼스키가 NSA의 한 부서가 아닐까 라고 추정한다(해외 기사는 NSA hacked라고 나오며 난리중)
shadowbrocker라는 그룹이 해킹한것 같은데 외국국가들 대상으로 사이버 무기를 판매할 생각이라고..
https://twitter.com/botherder
현재 원래 깃헙에 공개한 레포는 내려가고
https://github.com/samgranger/EQGRP 이 레포지토리만 남아있는 상태
http://thehackernews.com/2016/08/nsa-hacking-tools.html


저작자 표시 비영리 변경 금지
신고
Creative Commons License
Creative Commons License

'etc' 카테고리의 다른 글

왜 애플은 이어폰잭을 뺏을까?  (0) 2016.09.16
NSA HACKED!  (0) 2016.08.16
필기  (0) 2014.03.06

WRITTEN BY
Jen6
jen6의 개발, 보안 블로그 까끔가다 쓸대 있는걸 올리려고 노력중

받은 트랙백이 없고 , 댓글이 없습니다.
secret