์ƒˆ์†Œ์‹

Languages/C

[C์–ธ์–ด] ๋‘ ๋ณ€์ˆ˜์˜ ๊ฐ’ ๋ฐ”๊พธ๊ธฐ

  • -
๋ฐ˜์‘ํ˜•

์™€.. ์ด๊ฑฐ ๋ณด๋ฉด์„œ ๊ฐํƒ„ํ–ˆ์–ด์š” 

์ด์ œ๊ป ์ •๋ง ๊ฒฝํ—˜ํ•ด๋ณด์ง€ ๋ชปํ•œ ์ฝ”๋“œ์˜€๊ฑฐ๋“ ์š”.

 

 

๋‘ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ”๊พผ๋‹ค.. ํ•˜๋ฉด Swapํ•จ์ˆ˜๋งŒ์„ ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ .. 

"์—ฐ์‚ฐ๋งŒ"์„ ํ†ตํ•ด ์ž๋ฆฌ ๊ฐ’์„ ๋ฐ”๊พผ๋‹ค๋ฉด ? 

 

#include <stdio.h>

int main()
{
	char a = 3, b = 7; 

	printf("Before : a = %d, b= %d\n", a, b);

	a = a ^ b;
	b = a ^ b;
	a = a ^ b;


	printf("After : a = %d, b = %d\n", a, b);
	return 0;
}


/*
1byte๋กœ ํ‘œํ˜„ํ•˜๋ฉด
a = 0000 0011
b = 0000 0111

๋‘๊ฐ€์ง€ ์ž๋ฆฌ ๋ฐ”๊พธ๋ ค๋ฉด?

xor์€ ๋‘๋ฒˆ ์—ฐ์‚ฐ ์‹œ ๋ณธ๋ž˜ ์ž์‹ ์ด ์ €์žฅํ•œ ๊ฐ’์„ ๊ฐ€์ง
(๊ฐ™์œผ๋ฉด 0, ๋‹ค๋ฅด๋ฉด 1)
0000 0011 (a)
0000 0111 (b)
---------
0000 0100 (4)
--> 4

a = a^b; -> a๊ฐ€ 4๋กœ ๋ฐ”๋€œ

0000 0111 (b)
0000 0100 (4)
----------
0000 0011 (a)

--> ๋‹ค์‹œ 3์ด๋จ.

b = b^a; -> b๊ฐ€ 3์œผ๋กœ ๋ฐ”๋€œ

0000 0011 (b) ์›๋ž˜ a
0000 0100 (a) ์ถ”๊ฐ€์ ์œผ๋กœ ์ƒ๊ธด ๊ฐ’
---------
0000 0111 (7) ์›๋ž˜ b

a = b^a ; -> a๊ฐ€ 7๋กœ ๋ฐ”๋€œ

*/

 

XOR์—ฐ์‚ฐ์ž๋ฅผ ์•„์‹œ๋‚˜์š”? 

xor ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด์„œ, ์ด๋ ‡๊ฒŒ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์— ์‚ฌ์šฉ์ด ๋  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.. ์ €๋„ ์ฒ˜์Œ ๋ณด๋„ค์š” ใ…Žใ…Ž

 

 

ํ•จ์ˆ˜๋กœ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค!

์ƒ๊ฐํ–ˆ๋˜ ๋ฐฉ๋ฒ•๊ณผ ๋„ˆ๋ฌด ๋‹ค๋ฅด๋‹ค๊ณ  ๋†€๋ผ์ง€ ๋งˆ์„ธ์š” ใ…Žใ…Ž

 

#include <stdio.h>
#define SWAP(a,b) {a ^= b; b ^= a; a ^= b;}

int main()
{
	char a = 3, b = 7;

	printf("Before : a = %d, b= %d\n", a, b);

	SWAP(a, b)

	printf("After : a = %d, b = %d\n", a, b);
	return 0;
}

 

๊ตฟ !

 

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.