컴퓨터에 음수로 저장할때

rky0930의 이미지

-5를 저장하면

0 0 0 0 0 1 0 1 → 1 1 1 1 1 0 1 0 → 1 1 1 1 1 0 1 1
1의 보수 LSB에 +1

이라면

1 1 1 1 0 0 0 0 은 -17

1 1 1 1 0 0 0 0 → 1 1 1 0 1 1 1 0 → 0 0 0 1 0 0 0 1
LSB에 -1 1의 보수

맞나요?

freestyle의 이미지

일단 MSB(Most Significant Bit)를
부호로 해석하느냐 가장 높은 양의 자리수로
해석하느냐를 signed, unsigned로 결정하게 됩니다.
1바이트(8비트) 기준으로 signed는 -(2^7) ~ (2^7)-1까지 표현 가능하고
unsigned는 0 ~ (2^8)-1까지 표현 가능합니다.

signed, 즉 MSB를 부호로 볼 때
음수를 표기할 때 2의 보수법을 주로 사용하는데
1의 보수법이나 다른 표기법보다 컴퓨터에 적용시키기 쉽기 때문에
많이 사용되는 것으로 알고 있습니다.

손으로 계산하실 때
-5는 +5를 2진법으로 표시하시고 2의 보수를 취하면 됩니다.

0000 0101 (+5)
1111 1010 (1의 보수)
1111 1011 (2의 보수 = 1의 보수 + 1)
이것이 -5의 표기입니다.

1111 1111이 -1이므로 4개 감소하면 -5. 맞죠?
또는 +5와 -5를 더해서 0이 나오는지 보는 것입니다.
0000 0101 (+5)
1111 1011 (-5)
--------------)+
0000 0000 (0). carry(자리 올림수) 발생

이제 거꾸로
비트를 signed로 읽어서 2의 보수로 표현된
그 비트값이 음수로 몇인지 계산해 보도록 하죠.

방법은 이렇습니다.
1111 0000를 예로 들겠습니다.
1) MSB를 보니 1이다. 그렇다면 이것은 음수! 일단 MSB를 잘라낸다.
2) 나머지 7자리(111 0000)의 2의 보수를 구한다.
000 1111 (1의 보수)
001 0000 (2의 보수)
3) 2진수를 10진수로 읽으니 16. 여기에 잘라둔 -부호를 붙인다.
따라서 -16이네요.

확인은 16을 2진수로 풀어 써서
1111 0000과 더해 보시면 0이 나오는 것을 알 수 있을 것입니다.
(carry는 무시함)

---------------------------
Go to the U-City

----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------

Necromancer의 이미지

정수는 일단 특별한 경우가 아니면 다 2의 보수를 쓰고요.
원 수와 2의 보수의 합은 항상 2^n 형태입니다. (n은 표현하는 2진수 자릿수입니다. 가장 긴 수보다는 더 길어야겠죠.)

예를 들어 2진수 4자리에서 숫자 5(0101)의 보수는 1011이 되는데 이 두 수를 더하면 10000이 됩니다.

11110000은 -16입니다. 11110000과 10000(10진수 16)이 합쳐져야 100000000이 되거든요 (2^9)

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.