λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
C μ–Έμ–΄/λ¬Έμ œν’€μ΄

[Cμ–Έμ–΄]μ •μˆ˜λ₯Ό 2의 보수둜 λ³€ν™˜ν•˜λŠ” ν”„λ‘œκ·Έλž¨ : μ‰½κ²Œ ν’€μ–΄μ“΄ Cμ–Έμ–΄ Express 5μž₯ 221p

by IworldT 2021. 9. 23.
λ°˜μ‘ν˜•

λͺ…ν’ˆ Cμ–Έμ–΄ ν”„λ‘œκ·Έλž˜λ°, μ‰½κ²Œ ν’€μ–΄μ“΄ Cμ–Έμ–΄ Express 5μž₯ 221p (생λŠ₯μΆœνŒμ‚¬) 221p에 μžˆλŠ” 6번 문제λ₯Ό ν’€μ΄ν•΄λ³΄μž.

 


 

6. intν˜•μ˜ μ •μˆ˜λ₯Ό λΉ„νŠΈ μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬μ„œ 2의 보수(2's complement)둜 λ³€ν™˜ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ—¬ 보자. 2의 λ³΄μˆ˜λŠ” λ¨Όμ € 전체 λΉ„νŠΈλ₯Ό λ°˜μ „μ‹œν‚¨ 후에 1을 λ”ν•˜λ©΄ λœλ‹€. 

 HINT  - λΉ„νŠΈλ₯Ό λ°˜μ „μ‹œν‚€λŠ” μ—°μ‚°μžλŠ” ~이닀.

 


 

 ν’€μ΄ 

2의 λ³΄μˆ˜λŠ” λ‹€μŒμ„ μ°Έκ³ ν•˜λ©΄ λœλ‹€. ν•œ 수의 음수λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•œ 보편적인 λ°©μ‹μœΌλ‘œ, 2μ§„μˆ˜λ₯Ό ν™œμš©ν•œ 것이닀.

1의 λ³΄μˆ˜μ™€ 2의 보수

μž…λ ₯받은 μˆ˜λŠ” num λ³€μˆ˜μ— μ €μž₯ν•˜κ³ , κ·Έ num의 2의 보수 값은 result λ³€μˆ˜μ— μ €μž₯ν•  것이닀.

λΉ„νŠΈλ₯Ό λ°˜μ „μ‹œν‚€λŠ” μ—°μ‚°μžλŠ” ~인데 , 2의 λ³΄μˆ˜κ°€ 되렀면 κ·Έ 값에 1을 λ”ν•˜λ©΄ λ˜λ‹ˆ 연산을 μ°¨λ‘€λ‘œ μ§„ν–‰μ‹œμΌœ μ£Όλ©΄ λ˜κ² λ‹€.

빈 ν”„λ‘œμ νŠΈ(C++)λ₯Ό μƒμ„±ν•˜κ³ , μ†ŒμŠ€νŒŒμΌμ— complement.c νŒŒμΌμ„ 생성해쀀닀.

 

 

 μ½”λ“œ 

#include <stdio.h>

int main(void) {
	
	int num, result;

	printf("μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ‹œμ˜€ : ");

	scanf_s("%d", &num);

	result = ~num;

	result += 1;

	printf("2의 보수 : %d\n", result);

	return 0;

}

 

 

 μ‹€ν–‰ κ²°κ³Ό 

둜컬 Windows 디버거λ₯Ό μ΄μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ„ 돌렀보자.

 

μ •μˆ˜λ₯Ό μž…λ ₯ν•˜λΌλŠ” λ¬Έμžμ—΄μ΄ 잘 좜λ ₯λ˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

 

2의 보수 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰κ²°κ³Ό

 

λ¬Έμ œμ— μ œμ‹œλœ λŒ€λ‘œ 100을 μž…λ ₯ν•˜λ©΄ 2의 보수 -100이 좜λ ₯되고 였λ₯˜ 없이 μ’…λ£Œλ˜λŠ” 것을 확인할 수 μžˆλ‹€.

 

 

λͺ…ν’ˆ Cμ–Έμ–΄ ν”„λ‘œκ·Έλž˜λ° , 생λŠ₯μΆœνŒμ‚¬ , λΉ„νŠΈ μ—°μ‚°μž , λΉ„νŠΈ λ°˜μ „ , 2의 보수 , intν˜•μ˜ μ •μˆ˜ , 2의 보수 λ³€ν™˜ , ν”„λ‘œκ·Έλž¨ μ½”λ“œ , μ½”λ”© , ν”„λ‘œκ·Έλž˜λ° , λΉ„νŠΈ λ°˜μ „

728x90
λ°˜μ‘ν˜•

λŒ“κΈ€