jeonggunlee / LogicDesign

논리 회로 및 실험: 2024 봄학기, 한림대학교 소프트웨어융합대학
https://github.com/jeonggunlee/LogicDesign
12 stars 8 forks source link

교수님 질문있습니다! #33

Open stella1005 opened 4 years ago

stella1005 commented 4 years ago

교수님 4bit Adder에서 예를 들어 1100(12) + 0101(5)의 경우, input값을 unsigned로 보고 overflow가 발생하여 결과는 0001(1)이 되었다고 해석해야 될지, 이를 signed로 보고 1100(-4) + 0101(5) = 0001(1)이 되었다고 해석해야 될지 모르겠습니다. Adder는 2가지 모두 해석이 가능하지만 Subtractor의 경우 input값을 unsigned로 해석하면 0001(1) + (–1010(-10)) = 0111(7)이라는 모순적인 결과가 나오기 때문에 0001(1) + (-(1010(-6))) = 0001(1) + (-1010(6)) = 0111(7) 이렇게 signed로 보는 게 맞는 것 같은데 그럼 Adder와 Subtractor에선 input값을 signed로 해석하면 될까요?

jeonggunlee commented 4 years ago

네 ! 아주 좋은 질문 감사합니다.

우리 학생이 만든 예제를 보면 unsigned에서는 overflow가 발생하고, signed에서는 overflow가 발생하지 않은 것으로 해석할 수 있습니다. 그렇다면, 결정은 어떻게 해야할까요 ? 답은 우리가 프로그래밍 할때 처럼 현재 해석하고자 하는 값이 unsigned 인지 signed인지를 지정하여 명확히 해석할 수 있게 하는 것입니다.

여러분 대부분이 현재 2학년이라서 C 프로그램을 모두 배우지 않았을 것 같은데요. C언어를 보면, int 같은 경우 signed int이고, 변수 값이 절대 음수가 아닌 경우 unsigned int 라고 정확기 type을 지정해 줌으로써 학생이 보내준 예제 처럼 모호한 해석을 회피할 수 있습니다.

더불어, subtractor를 사용하면 음수가 나올 여지가 많기 때문에 당연히 값의 type을 signed로 해석하는 것이 정확할 것입니다!

결과적으로, 수의 범위를 프로그래머가 어느정도 가능하고 type을 명확히 지정하여 프로그래밍을 할 수 있다면 좀더 최적화되고 올바른 코드를 생성할 수 있을 것입니다. 이말은 하드웨어 엔지니어가 아니더라도 코드를 더 효과적으로 개발하기 위해서 논리회로 설계 및 컴퓨터 구조와 같은 과목을 들어야 한다는 것을 의미하기도 합니다! ^^

좋은 주말! 화이팅!!~