본문 바로가기
C언어

10진수를 2진수로, 2진수를 10진수로

by janeparker 2023. 6. 3.
728x90
반응형
#include <stdio.h>
#include <math.h>  //pow()
#include <string.h> //strlen()
#include <stdlib.h> //exitd()
#include <stdbool.h>



unsigned char to_decimal(const char bi[]);
void print_binary(const unsigned char num);


int main()
{
    unsigned char i = to_decimal("01000110");
    unsigned char mask = to_decimal("00000101");

    print_binary(i);
    print_binary(mask);
    print_binary(i & mask);



    return 0;
}


unsigned char to_decimal(const char bi[]) {
    const size_t bits = strlen(bi);
    unsigned char sum = 0;

    for (size_t i = 0; i < bits; i++)
    {
        if (bi[i] == '1')
            sum += (int)pow(2, bits - 1 - i);
        else if (bi[i] != '0') {
            printf("wrong character: %c", bi[i]);
            exit(1);
        }
    }

    return sum;
}

void print_binary(const unsigned char num)
{
    printf("decimal %3d  \t == Binary ", num);

    const size_t bits = sizeof(num) * 8;

    for (size_t i = 0; i < bits; ++i)
    {
        const unsigned char mask =
            (unsigned char)pow((double)2, (double)(bits - 1 - i));
        // unsigned char mask = pow(2, (bits -1-i));

        if ((num & mask) == mask)
            printf("%d", 1);
        else
            printf("%d", 0);

    }
    printf("\n");

}
728x90
반응형

'C언어' 카테고리의 다른 글

비트단위 연산자 종류별 예시  (0) 2023.06.03
자료형의 크기 및 범위  (0) 2023.06.03
%hhu %hhd 차이  (0) 2023.06.03
개행문자 r \ n, \ n, \t, \b  (1) 2023.06.03
2진수 10진수 16진수 변환  (0) 2023.01.26