Do You Coding?

[library] toupper ๊ตฌํ˜„ํ•˜๊ธฐ ๋ณธ๋ฌธ

CS & Engineering/C

[library] toupper ๊ตฌํ˜„ํ•˜๊ธฐ

๐Ÿ“Œ ๋งค๋‰ด์–ผ (Linux)

๋”๋ณด๊ธฐ

NAME
       toupper - convert uppercase
: ๋Œ€๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ธฐ


SYNOPSIS
       #include <ctype.h>
       int toupper(int c);

DESCRIPTION
       These functions convert lowercase letters to uppercase, and vice versa.

       If c is a lowercase letter, toupper() returns its uppercase equivalent, if an uppercase repreโ€
       sentation exists in the current locale.  Otherwise, it returns c.

: ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ ์†Œ๋ฌธ์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.

c๊ฐ€ ์†Œ๋ฌธ์ž์ธ ๊ฒฝ์šฐ toupper()๋Š” ๋Œ€๋ฌธ์ž๋กœ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด c๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

RETURN VALUE
       The value returned is that of the converted letter, or c if the conversion was not possible.

: ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์€ ๋ณ€ํ™˜๋œ ๋ฌธ์ž ๋˜๋Š” ๋ณ€ํ™˜์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์— c๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

๐Ÿ“Œ ์ž‘์„ฑ ์ฝ”๋“œ

int	do_toupper(int c)
{
	if (97 <= c && c <= 122)
		c = c & ~(1 << 5);
	return (c);
}

 

๐Ÿ“Œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ

toupper๋Š” ๋‹จ์ˆœํ•˜๊ฒŒ ์†Œ๋ฌธ์ž ์˜์–ด๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ๋ฐ”๊ฟ”์„œ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š”๋ฐ,  int ์ž๋ฃŒํ˜•์œผ๋กœ ๋ฐ›์•„ ํ•ด๋‹น ๋ฌธ์ž๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

ํ•จ์ˆ˜๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด, if๋ฌธ์—์„œ 97~122์— c๊ฐ€ ํ•ด๋‹น๋˜๋Š”์ง€ ํŒ๋ณ„ํ•˜๋Š”๋ฐ, ์•„์Šคํ‚ค ์ฝ”๋“œ ์ƒ์—์„œ ๊ฐ๊ฐ 'a', 'z'๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋”ฐ๋ผ์„œ, ์†Œ๋ฌธ์ž์— ํ•ด๋‹น๋˜๋ฉด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๊ณ , ์ด์ œ ๋Œ€๋ฌธ์ž๋กœ ๋ฐ”๊ฟ”๋งŒ ์ฃผ๋ฉด ๋˜๋Š”๋ฐ ๋‹จ์ˆœํžˆ 32๋ผ๋Š” ๊ฐ’์„ ๋นผ์ค˜๋„ ๋˜์ง€๋งŒ,

๊ทธ ๋Œ€์‹  ์ด ์ฝ”๋“œ์—์„œ๋Š” c = c & ~(1 << 5) ๋ผ๋Š” ํŠน์ดํ•œ ์—ฐ์‚ฐ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

 

์šฐ์„  1 << 5 ๋Š”, ํ”ผ์—ฐ์‚ฐ์ž์ธ 1์„ 5๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ๋น„ํŠธ ์ด๋™์„ ์‹œ์ผœ์ค€๋‹ค๋Š” ๋œป์ธ๋ฐ,

00000000 00000000 00000000 00000001 ์—์„œ 5์นธ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜์—ฌ

00000000 00000000 00000000 00100000 ๊ฐ€ ๋˜์–ด์ง„ ์ƒํƒœ์ด๋‹ค. (int ์ด๋ฏ€๋กœ 32๋น„ํŠธ)

 

์ด์ œ ์ด ๊ฐ’์„ ~ ๋ผ๋Š” ๋น„ํŠธ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•ด์„œ ๋น„ํŠธ ๋ฐ˜์ „์„ ์‹œ์ผœ์ค„ ๊ฒƒ์ด๋‹ค.

00000000 00000000 00000000 00100000 ๋Š” ๋น„ํŠธ๊ฐ€ ๋ฐ˜์ „๋˜์–ด

11111111 11111111 11111111 11011111 ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋˜๊ณ  ์ด๋ฅผ ์—ฐ์‚ฐ์— ํ™œ์šฉํ•  ๊ฒƒ์ด๋‹ค.

 

๊ธฐ์กด์— ์žˆ๋˜ c (์˜ˆ์‹œ๋กœ 'b' ์˜ ๊ฐ’์ธ 98์ด ๋“ค์–ด์žˆ๋‹ค๊ณ  ๊ฐ€์ •)์™€ & ๋น„ํŠธ ์—ฐ์‚ฐ์„ ํ•ด์ฃผ๋Š”๋ฐ,

AND ์—ฐ์‚ฐ์ด๋ฏ€๋กœ ๋‘˜ ๋‹ค 1์ผ๋•Œ๋งŒ 1์ด ๋˜๋„๋ก ๊ณ„์‚ฐ๋œ๋‹ค. ๊ทธ๋Ÿผ,

00000000 00000000 00000000 01100010 

& 11111111 11111111 11111111 11011111

__________________________________

00000000 00000000 00000000 01000010

 

์ด๋ผ๋Š” ๊ฐ’์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ 10์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ด๋ณด๋ฉด, 66์ด ๋‚˜์˜ค๊ณ , ์ด๋Š” 'B' ๋ฅผ ์˜๋ฏธํ•˜๋ฏ€๋กœ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋น„ํŠธ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์กฐ๊ธˆ ๋” ์ปดํ“จํ„ฐ์— ์นœํ™”์ ์œผ๋กœ ์ž‘์—…์„ ํ•ด๋ณด์•˜๋˜ toupper ์˜€๋‹ค.