[C언어] 10진수를 2진수로 출력하기
void tobi(int su) { int i, bit = 0x8000; for(i = 0; i < 16; i++) { if((i % 4) == 0)printf(" "); if((su & bit))printf("1"); else printf("0"); su = su << 1; } printf("\n"); } void main() { int su; printf("숫자를 입력해 주세요 : "); scanf("%d", &su); tobi(su); }
프로그램 실행화면
10진수를 입력받아 이를 8진수나 16진수로 출력하기란 쉽다. printf("%o, %x", su1, su2); 즉 %o, %x를 통해서 각각 8진수 16진수로 출력해 줄 수 있기 때문이다.
하지만 2진수를 출력해 주는 놈은 없다. 따라서 2진수로 출력해주기 위해선 따로 함수를 만들어 줄 필요가 있다. 비트연산이 들어가기 때문에 조금 어려워 보일 뿐이지 이해하면 엄청 쉬운 방법임을 알 수 있다.
봐야 할 부분은 tobi()함수이다. su가 매개변수로 넘어가고 bit가 지역변수로 선언되어 있다. 그리고 초기값은 0x8000이다. 원래 int는 4바이트이나 하위 2바이트만 출력했다. 4바이트 전체를 출력해 줄려면 for문의 조건을 i < 32로 하고 bit의 초기값을 0x80000000으로 해주면 된다.
다시 프로그램을 설명하자면 제일 상위비트 쯕 제일 왼쪽에 있는 비트부터 출력을하되 su와 bit를 and연산해서 즉 bit는 상위 비트가 항상 1이므로 su의 상위비트가 1이라면 1을 출력하고 0이라면 0을 출력하도록 했다.
그리고 su변수를 왼쪽으로 shift한번 실행하면 된다. 이를 16번 반복하게 되면 2진수로 출력된다. 4비트씩 묶으면 보기 편해서 띄어놓았다.