안녕하세요 2진수를 다루는데 있어 고민이 생깁니다 17(10)을 입력받던, 0x11을 입력받던 0b0000 0000 0001 0001으로 저장하고 싶고, -17(10)이던, -0x11이던, 0b1111 1111 1110 1111으로 저장하고 싶습니다. 어떤 방법을 사용할 수 있나요?
c 언어 인가요? 그리고 "0b1111 1111 1110 1111" 로 저장하고 싶다는 건.. 저장할 변수의 타입이 문자열(char *) 로 하고 싶다는 얘기인지요?
일단 c 는 형변환이 가능 하므로, 17을 입력 받든.. 0x11 을 입력 받든.. int 형 자료형으로 저장(strtol 이용)을 해 놓으시면 될 것이고, 2진수 문자열이 필요하다면 다음 코드 이용하여 구하실 수 있을 겁니다.
#include <stdio.h> int main() { int decimal = -17; int binary[20] = { 0, }; int nega = 0; if ( decimal < 0 ) { nega = 1; decimal *= -1; } int position = 0; while (1) { binary[position] = decimal % 2; // 2로 나누었을 때 나머지를 배열에 저장 decimal = decimal / 2; // 2로 나눈 몫을 저장 position++; // 자릿수 변경 if (decimal == 0) // 몫이 0이 되면 반복을 끝냄 break; } // 배열의 요소를 역순으로 출력 int b, i, j=0; //for (i = position - 1; i >= 0; i--) printf ("0b"); for (i = 15; i >= 0; i--) { if ( j %4 == 0 ) printf (" "); if ( nega ) { b = binary[i] ? 0 : 1; } else { b = binary[i]; } printf("%d", b); j++; } printf("\n"); return 0; }
위 코드는 https://dojang.io/mod/page/view.php?id=301 의 코드를 자리수(16bit)와 음수 처리한 부분만 수정한 것입니다. 생각하기 싫어서 검색한 코드 약간만 수정했고요.. 10진수를 2진수로 변경하는 방법을 풀어서 만든 코드 입니다.
좀 더 효율적으로 사용하시려면 itoa 함수를 사용하면 되는데, itoa 가 표준 함수는 아니라서 itoa 로 검색해 보시면 itoa 를 구현한 코드들을 쉽게 찾을 수 있습니다.
https://stackoverflow.com/questions/190229/where-is-the-itoa-function-in-linux
8진수 16진수 문자열은 간단하게 sprintf 를 이용할 수도 있습니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
c 언어 인가요?
c 언어 인가요?
그리고 "0b1111 1111 1110 1111" 로 저장하고 싶다는 건.. 저장할 변수의 타입이 문자열(char *) 로 하고 싶다는 얘기인지요?
일단 c 는 형변환이 가능 하므로, 17을 입력 받든.. 0x11 을 입력 받든.. int 형 자료형으로 저장(strtol 이용)을 해 놓으시면 될 것이고, 2진수 문자열이 필요하다면 다음 코드 이용하여 구하실 수 있을 겁니다.
위 코드는 https://dojang.io/mod/page/view.php?id=301 의 코드를 자리수(16bit)와 음수 처리한 부분만 수정한 것입니다. 생각하기 싫어서 검색한 코드 약간만 수정했고요.. 10진수를 2진수로 변경하는 방법을 풀어서 만든 코드 입니다.
좀 더 효율적으로 사용하시려면 itoa 함수를 사용하면 되는데, itoa 가 표준 함수는 아니라서 itoa 로 검색해 보시면 itoa 를 구현한 코드들을 쉽게 찾을 수 있습니다.
https://stackoverflow.com/questions/190229/where-is-the-itoa-function-in-linux
8진수 16진수 문자열은 간단하게 sprintf 를 이용할 수도 있습니다.
댓글 달기