์์ ์ 2์ ๋ณด์์ ๋ํ post๋ฅผ ์์ฑ ํ ์ ์ด ์์ต๋๋ค. ๋ฌธ๋ ์ด ๋ถ๋ถ์ C์ธ์ด๋ก ์ฝ๋ฉํ๋ฉด ์ฌ๋ฏธ์์ง ์์๊น ์๊ฐ๋์ด ํ๋ฒ C์ธ์ด๋ก ์ฝ๋ฉํ ํด๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ ๋ด ๋๋ค.
C์ธ์ด์์๋ ๋ณ์์ ์ด๋ค ๊ฐ์ ๋ฃ๋๋ผ๋ ๊ทธ ๊ฐ์ printf()๋ฌธ์ ์ด๋ป๊ฒ ์ถ๋ ฅ ํ์์ ์ทจํ๋๋์ ๋ฐ๋ผ์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ํ๊ฒ ์ถ๋ ฅ ํ ์ ์์ต๋๋ค. ์ ์๋ฅผ "%0"๋ก ์ทจํ๋ฉด 8์ง์ ํํ๋ก ์ถ๋ ฅ ๋๊ณ "%x"๋ก ์ทจํ๋ฉด 16์ง์ ํํ๋ก ์ถ๋ ฅ์ด ๋ฉ๋๋ค. ์ฐธ๊ณ ๋ก 2์ง์ ํํ๋ printf()๋ฌธ์ ์ถ๋ ฅํ์์ ์๊ธฐ ๋๋ฌธ์ ์ ์๋ฅผ 2์ง์ ๊ฐ์ผ๋ก ๊ฐ์ ํด์ ์๋ฆฟ์ ๊ฐ์ ์ถ๋ ฅํด๋ณด๋ ์ฝ๋ฉ์ ์์์ ์ผ๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
์)
12 => 00001100
์์ ๊ฐ์ ํํ๋ก ์ถ๋ ฅ์ ํ๊ฒ ๋ง๋ค๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์. 12๊ฐ์ 2์ง์๋ก ์๊ฒ ์ชผ๊ฐ๋ ๋ฐฉ๋ฒ์ 12์ ๊ณ์ 2๋ก ๋๋ ๋ชซ์ ๋์ดํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง &์ฐ์ฐ์ ์ด์ฉํ์ฌ ์ฝ๊ฒ ์ชผ๊ฐ๋ ๋ฐฉ๋ฒ์ ์ทจํ ๊น ํฉ๋๋ค.
1100
&1000
--------
1000
์ด๋ ๊ฒ &์ฐ์ฐ์๋ AND ์ฐ์ฐ์๋ก 1๊ณผ 1์ผ ๋ 1์ด ๋์ค๊ณ 1๊ณผ 0์ผ ๋๋ 0์ด ๋์ต๋๋ค.
๊ทธ๋์ ์ ์ 12๋ฅผ 2์ง์๋ก ์ถ๋ ฅ ๋๊ฒ ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1000 0000 => 0x80
์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก 12์ ์์ & ์ฐ์ฐ์ ์ํํฉ๋๋ค. ์ด 8์๋ฆฌ ๋นํธ๋ฅผ ๋น๊ตํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฃจํ๋ฌธ์ผ๋ก 8๋ฒ & ์ฐ์ฐ์ ์ํํฉ๋๋ค. ์ฐธ๊ณ ๋ก ๊ฐ ์๋ฆฌ๋นํธ๋ฅผ ๋น๊ตํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฌํํธ ์ฐ์ฐ์ ๋ณ๋๋ก 0x80์ ์ทจํด์ผ ํฉ๋๋ค.
1000 0000 => 0100 0000 => 0010 0000 ...
์ด๋ฐ์์ผ๋ก ๊ฐ ์๋ฆฌ๋นํธ๋ฅผ ๋ง๋ค์ด์ & ์ฐ์ฐ์ ์ํํด์ผ ํ๋๋ฐ ์ด ํํ์ ํ๋ ค๋ฉด ์ฌํํธ ์ฐ์ฐ์ ์ฝ๊ฒ ํํ์ด ๋ฉ๋๋ค.
b = 0x80;
b=b>>1;
์ด๋ ๊ฒ ํ์นธ์ฉ ์ด๋์ํค๋ฉด ๋ฉ๋๋ค.
์ ๋ด์ฉ์ ์ฝ๋ฉํ ํ๋ฉด,
int a=12;
int b=0x80;
int i;
int tmp[8];
for(i=0;i<8;i++){
if(a&b) tmp[i]=1;
else tmp[i]=0;
b=b>>1;
}
[๊ฒฐ๊ณผ]
์ด๋ ๊ฒ ํ๋ฉด 12์ ๋ํ ๊ฐ ์๋ฆฌ๋นํธ์ 1์ธ์ง 0์ธ์ง ํ์ธ์ ํตํด tmp[i]์ ํด๋น ์๋ฆฌ ๋นํธ ๊ฐ์ ์ ์ฅํ๊ฒ ๋ฉ๋๋ค.
-12์ 2์ ๋ณด์๋ฅผ ์ทจํด ์์๋ฅผ 2์ง์ ํํ๋ก ์ถ๋ ฅ ํด ๋ณผ๊น์.
์) 2์ ๋ณด์ -12
12 =>
0000 1100
11110011
11110011+0000 0001 = 11110100
์ ๊ณผ์ ์ C์ธ์ด๋ก ์ฝ๋ฉํ ํด์ผ ํฉ๋๋ค.
for(i=0;i<8;i++){
if(a&b) tmp[i]=1;
else tmp[i]=0;
b=b>>1;
}
for(i=0;i<8;i++){
printf("%d",tmp[i]);
if(tmp[i]==1) tmp[i]=0;
else tmp[i]=1;
}
for(i=7;i>=0;i--){
if(tmp[i]==1) tmp[i]=0;
else {
tmp[i]=1;
break;
}
}
๋ง์ง๋ง +1์ ๋ํ๋ ์ ์ฝ๋ฉ์ ์์ธํ ๋ณด์ ์ผ ํฉ๋๋ค. ์ฝ๊ฐ ํ๊ฐ๋ฆด ์ ์์ต๋๋ค. ์ญ์์ผ๋ก ๋ง์ง๋ง ์๋ฆฌ๋ถํฐ 1์ด๋ฉด +1์ ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฆผ์๋ก ๊ณ์ ์์ฐจ์ ์ผ๋ก 1์ผ๋๋ ํด๋น ์๋ฆฌ๋ ์ต์ข ์ ์ผ๋ก 0์ด ๋๊ณ 1์ด ์ฌ๋ผ๊ฐ๊ณ ๋ค์ ๋นํธ์๋ฆฌ๊ฐ 1 or 0 ์ด๋์ ๋ฐ๋ผ์ ๋ํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ํ๋ ๋นํธ์๋ฆฌ๊ฐ 0์ด ๋๋ฉด ๊ทธ ์๋ฆฌ๋ 1์ด ๋๊ณ break ๋ฌธ์ผ๋ก for๋ฌธ์ ๋น ์ ธ ๋์ค๊ฒ ๋ฉ๋๋ค.
์ด๋ ๊ฒ ํด์ tmp[] ๋ฐฐ์ด ๋ณ์์๋ -12์ ๋ํ 2์ ๋ณด์๋ฅผ ์ทจํ 2์ง์ ๊ฐ์ด ์ ์ฅ๋๊ฒ ๋ฉ๋๋ค.
์ด์ ๋ ์ ์์ ์ผ๋ก ์ ๊ณผ์ ์ด ๋์ํ๊ณ ๊ฒฐ๊ณผ์ ์ป๋์ง ํ์ธ ํด์ผ ๊ฒ ์ง์.
[์ ์ฒด์์ค]
#include
int main(int argc, char *argv[]) {
int a=12;
int b = 0x80;
int i;
int tmp[8];
for(i=0;i<8;i++){
if(a&b) tmp[i]=1;
else tmp[i]=0;
b=b>>1;
}
printf("%d => \n",a);
for(i=0;i<8;i++){
printf("%d",tmp[i]);
}
printf("\n");
for(i=0;i<8;i++){
printf("%d",tmp[i]);
if(tmp[i]==1) tmp[i]=0;
else tmp[i]=1;
}
printf("\n");
for(i=0;i<8;i++){
printf("%d",tmp[i]);
}
printf("\n");
for(i=7;i>=0;i--){
if(tmp[i]==1) tmp[i]=0;
else {
tmp[i]=1;
break;
}
}
for(i=0;i<8;i++){
printf("%d",tmp[i]);
}
printf("\n");
return 0;
}
์ ์ฝ๋ฉ์ ๋ณด์๋ฉด -12์ ๋ํ 2์ ๋ณด์๋ฅผ ์ทจํ 2์ง์ ๊ฐ์ ์ถ๋ ฅํ๋ ์ฝ๋ฉ์ธ๋ฐ ์ a์ 12๋ผ๋ ์์๊ฐ ์ ์ฅ๋์ด ์๋๊ณ ์ด์ํ๋ค๊ณ ์๊ฐํ์ค ์ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ 12๋ผ๋ ์ซ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณด์๋ฅผ ์ทจํ๊ธฐ ๋๋ฌธ์ -12๋ฅผ ์ฝ๋ฉ์์๋ ์ ์ธํ ์ ์์ต๋๋ค. 1๋นํธ์ฉ ์ชผ๊ฐ์ ๋ฐฐ์ด๋ณ์์ ๋ฃ๋ ๊ฑฐ๋ผ์ ์์ 12๋ฅผ ๊ธฐ์ค์ผ๋ก 2์ ๋ณด์๋ฅผ ์ทจํด ๋ฐฐ์ด๋ณ์์ -12์ ๊ฒฐ๊ณผ๊ฐ์ ์ป๋๋ก ํ๊ธฐ ์ํ ํํ์์ผ๋ก ๊ฐ์ํ์ ์ ๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
[๊ฒฐ๊ณผ]
๋ฌธ๋ ๋ ์ค๋ฅธ 2์๋ณด์์ ๋ํ C์ธ์ด ์ฝ๋ฉ์ ํด ๋ณด์๋ค์. ์ฐธ๊ณ ๋ก ์ ์ฒด์์ค๋ฅผ ๋ณด๋ฉด ๊ฝค ๊ธด ์ฝ๋ฉ์ด ์ด๋ฃจ์ด์ก์ต๋๋ค. ์ค๊ฐ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ printf()๋ฌธ์ผ๋ก ์ถ๋ ฅํ๋ค๋ณด๋ ๋ถํ์ํ ์ฝ๋ฉ์ด ๋ง์์ก๋๋ฐ ์ต์ข ๊ฒฐ๊ณผ๋ง ์ถ๋ ฅํ๊ฒ ์์ ํ์ฌ ์ฝ๋ฉ์ ์ค์ฌ์ ๊น๋ํ๊ฒ ์ ๋ฆฌํด์ ๋ณด์๊ธฐ ๋ฐ๋๋๋ค.