inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

독하게 시작하는 C 프로그래밍

비트연산자 뺄셈 구현에서 질문이 있습니다.

해결된 질문

624

김태수

작성한 질문수 2

0

안녕하세요 선생님!

선생님 덕분에 재미있게 C를 공부하고 있습니다. 감사합니다.

다름이 아니고 비트연산자로 뺄셈을 구현할 때 약간 이해가 안 가는 점이 있어 질문을 드립니다.

 

	int a = 9, b = 6;
	printf("%d\n", a + (~b + 1));
	// 1001 + 1010 = 10011 ....???
	return 0;

10진수 9에서 10진수 6을 빼는 연산에서

6을 2진수로 치환한 후 부정을 걸어 1의 보수로 만들고 1을 더하면 1010이 되는 것으로 알고 있습니다.

여기에 10진수 9를 2진수로 치환한 1001을 더하면 10011이 됩니다.

그럼 답이 19가 되어야 하지 않을까 생각이 듭니다.

 

자리올림을 소거하면 0011로 3이 맞지만

그걸 따로 코딩을 안해준 상태에서는 19가 나와야하지 않나요?

혹시 C에서 자리올림을 알아서 소거해주는 걸까요? 아니면 제가 계산을 잘 못하고 있는 걸까요?

 

답변 주시면 너무 감사하겠습니다!

c 컴퓨터-구조 assembly-language vc++

답변 2

2

Dongjoon Oh

1010이아니라

1111 1111 1111 1111 1111 1111 1111 1010이니까 그래요

더하면 자리수넘어감..

1

널널한 개발자

저 대신 답도 달아주셨네요. 고맙습니다. :)

0

김태수

감사합니다!! 동준님! ㅎㅎㅎ 열심히 공부하겠습니다

1

널널한 개발자

다른 분이 이미 저 대신 답변을 해주셨네요. 🙂

Dongjoon Oh님의 답변이 맞습니다. 한 가지 첨언하자면 32비트 정수형의 표현 범위를 넘어선 값에 대해서는 '잘림'처리 되어 버려집니다. 참고하시기 바랍니다.

 

0

김태수

넵 표현범위를 넘어서는 값에 대해서는 버려지게 된다는 점 잘 참고하겠습니다! ㅎㅎ 감사합니다!

주소 연산자(&) 간접 지정자(*) 반대 개념

0

22

1

Virtual Memory, Memory, Memory mapping tables

0

42

1

샘플코드 출력 오류 발생 질문드립니다

0

59

2

값의 교환에 사용되는 변수의 위치.

0

83

2

메모리 비교에 관한 질문

0

78

2

문자열 Null

0

60

1

C, C++

0

83

2

문자열 입출력 코드 에러

0

58

2

선생님! 120화 2분 50초 질문입니다.

0

65

1

caller 가 메모리 할당 해제를 할 때의 문제점 질문

0

60

2

단축키 맞는지 여부 문의드립니다.

0

58

2

문자열을 사용하는 이중 포인터에 대하여 질문합니다

0

62

1

char 포인터 변수의 크기에 대하여 제가 이해한 것이 맞을까요

0

77

2

용어 설명 필요

0

55

2

stdin, stdout

0

69

2

필수 실습 (최댓값을 반환하는 함수)

0

90

2

아......ㅠㅠ

0

96

2

버퍼 내 엔터

0

69

1

2진수 뺄셈에서 carry-out

0

110

2

union 식별자는 실무에서 보통 어디에서 사용하나요?

0

76

2

필수실습문제 공부법 (진도 vs 복습)

0

100

2

예제파일 다운로드

0

73

2

Visial Studio Code 를 설치해서 사용해도 수업을 따라가는데 지장이 있나요?

0

112

3

연산자 기본이론 강의 질문

0

57

2