컴퓨터 양수 , 음수 질문

qkrwncks593의 이미지

컴퓨터는 이진법을 사용하는데 이진법은 양수를 표현하는것이고

음수를 표현할때는 따로 부호비트를 두고 부호비트가 0 이면 양수 1 이면 음수인데

만약 1010 을 음수로 보면 -5 이고 또 다르게 보면 양수 10 인데

컴퓨터는 양수만 아는거 아닌가요? signed int 형 변수에서 MSB 가 1 이면 음수이고

unsigned int 형에서 MSB 가 1 이면 음수가 아닌게 햇갈리네요

cleansugar의 이미지

씨피유 인스트럭션이 변수의 부호에 따라 다릅니다.

씨가 어셈블리(사실은 기계어)로 컴파일 될 때 부호 없는 건 BYTE, 있는 건 SBYTE로 달라요.

즉 변수 내용 자체로만 보면 종류를 모릅니다.

그래서 타입 캐스팅도 됩니다.
http://kldp.org/node/119757

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

qkrwncks593의 이미지

제가 알고싶은건 하나입니다.

컴퓨터는 이진법만 이해한다는건 양수를 이해한다는건데

0001 은 어떻게 보면 양수 1 이고 또 다르게 보면 음수인데 컴퓨터는 대체 이런 숫자를 어떻게 구별할까요?

그리고 또 구별할줄안다면 음수도 이해한다는 소리인가요 ? 또 컴퓨터에서 왜 음수표기법이 나온거죠?

CPU 의 레지스터는 크기만 정해져있고 어떤형태의 데이터만 저장해라 이런기준도 없고 .. 그런데 C언어에서는

signed 는 양수,음수 unsigned 는 양수만 이렇게 정해져있는데 출력할때 서식을 맞지않게해서 예를들어

signed 를 %u 로 출력하고 unsigned 는 %d 로 출력하면 원래 저장한수가 다른의미가 되는데 .. 쩝.. 햇갈리네요

klara의 이미지

인스트럭션이 뭔지 찾아보셨어요? 답변이 달렸으면 그 내용에 대해서 어디가 이해가 안되는지를 적으셔야지 똑같은 질문을 반복하는건 결례입니다.

cleansugar의 이미지

인텔 8088 씨피유의 ADD 인스트럭션 자체가 레지스터의 값에 들어있는 부호를 인식합니다.

그리고 음수를 그렇게 표기하는 것은 2의 보수법 등으로 1만 더하면 양수의 부호가 쉽게 바뀌게 할 수 있기 때문에 사용하는 겁니다.

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

익명 사용자의 이미지

또.궁금한게 생겼는데. .

cpu가 msb를봐 음수를 인식한다면

Cpu의 esp나 ebp레지스터는 주소가 담겨잇는데

주소값은 모든비트를 양수해서 표현하는데

만약 주소가 커져서 msb까지 1로변하면

cpu가 음수로 인식해리지도 않나요?

cleansugar의 이미지

어셈블리어를 잘 모르기 때문에 어떻게 될지 저도 궁금하군요.

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

gilgil의 이미지

대부분의 CPU는 각각의 opcode(assembly code)가 signed와 자료형과 unsigned 자료형이 구분되어 있습니다.
2로 나누라는 것이 SHR, SAR로 구분되어 있듯이요.
다만, 2의 보수 진법을 사용하는 CPU에서는 더하기, 빼기는 signed와 unsigned를 구분하지 않아도 됩니다.

즉, 같은 숫자를 가지고 unsigned로 볼 수도 있고 signed로 볼 수도 있습니다.
0xFF를 255로 보기도 하고 -1로 보기도 하는 것처럼요.
예 : 0x33 + 0xFF == 0x32(8bit 연산으로 제한)

ps : 메모리 어드레싱과 관련된 opcode는 (쉽게 생각해서) unsigned라고 보시면 됩니다.

익명 사용자의 이미지

2의보수를 사용하는CPU는 무슨뜻이죠?

2의보수는알지만.. 2의보수를사용하는CPu가 무엇인지이해가안가네요

익명 사용자의 이미지

질문이 많아서 죄송한데 웹서핑을 해도 서핑실력이 안좋은건지

아니면 자료가없는건지못찾겠네요

--—---------------------*-***-*****

cpu가 msb를봐 음수를 인식한다면

Cpu의 esp나 ebp레지스터는 주소가 담겨잇는데

주소값은 모든비트를 양수해서 표현하는데

만약 주소가 커져서 msb까지 1로변하면

cpu가 음수로 인식해리지도 않나요?

--------------------------------

위에 글에대한 이진데이터를 양수로 인식 아니면 음수로 인식할때의

기준이뭐죠? 방금 써주진글보고 도움이 많이됐는데 프로세서가

이진데이터를 양수 일때나 음수로인식할때나 기준이 무엇인지모르겠네요 ㅠㅠ 제가 너무파고드는 성향이라.. 궁금한게 너무 많네요..

바쁘실텐데 .. 또 질문해서 죄송해요

gilgil의 이미지

예를 들어 설명을 해 보죠.
16bit 컴퓨터가 있고, 메모리는 65536 바이트의 범위(0x0000~0xFFFF)를 가진다고 가정합니다.

이중에 어떠한 변수가 0xFFFF 의 위치에 있다고 할 때요,
"그 변수는 0xFFFF 번지에 위치한다" 라고 하지
"그 변수는 -1 번지에 위치한다"라고 하지는 않는다는 겁니다.

gilgil의 이미지

CPU에 따라 2의 보수 체계를 사용하기도 하고 1의 보수 체계를 사용하기도 합니다.

http://en.wikipedia.org/wiki/Ones'_complement

> The CDC 6000 series and UNIVAC 1100 series computers were based on ones' complement.
> Intel, AMD, and IBM POWER chips are all two's complement.

요즘 대부분의 CPU들은 2의 보수 체계를 사용하는 것이 일반적이지요.

jongyoungcha의 이미지

컴퓨터 구조에 관한 책을 읽어보시면 알수 있습니다.

처음에 컴퓨터과학자들은 부호와 크기 표현법에 대해서 여러가지 방식을 적용해 봤습니다.

처음 나온 방식은 부호와 크기 방식입니다(sign and magnitude)
이 방식은 자료형에 하나의 비트를 더해서 음수 아님 양수를 구별하는 방식이었죠 예를 들어서 int형이 있다면 마지막 원하는 위치의 비트가 0이나 1이냐에 따라 양수 음수가 나뉘는 겁니다.
그러나 두가지 단점이 있었습니다.
데이터의 왼쪽이나 오른쪽이나 비트를 하나 더 둬야 하는 이 방식은 프로그래머의 부주의로 인해 문제를 일으킬 가능성이 농후했습니다.
또 이방식을 채택하게 되면은 덧셈기의 부호화를 결정하기 위해서는 하나의 단계가 더 필요하게 됬죠. 즉 크기를 결정하고 마지막 비트로 또 음수인지 양수인지 결정해야 했습니다.

따라서 이러한 방식을 보완한게 현제 사용되고 있는 2의 보수법(two's complement)입니다.
빅엔디안이나 리틀엔디안이냐 상관없이 MSB위치한 비트가 0이면 양수 1이면 음수로 판명하는 방식이죠 현제 이방식을 사용중입니다.

qkrwncks593의 이미지

컴퓨터 구조 및 설계책에 있는 내용이네요

감사합니다.

jongyoungcha의 이미지

그리고 음수로 치면 -5라고 하셨는데 보수화 하면 -6이 됩니다.
1010 -> 보수화 0101+1
-(5 +1) = -6

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.