简单的进制转换及C语言程序代码

二进制  八进制  十进制  十六进制

2进制  --->  10进制

1 0 1 1 0 0   --->   2^2+2^3+2^5=4+8+32=44

2^5      2^4        2^3        2^2        2^1        2^0

二进制转十进制:使用strtol函数进行转换

#include <stdio.h>
#include <stdlib.h>

int main() {
    char binary[] = "1010";
    char *ptr;
    long ret;

    ret = strtol(binary, &ptr, 2);
    printf("%ld", ret);

    return 0;
}

10进制  --->  2进制

1. 短除法:对2进行倒取余

66--->100010

2. 拆分法:64--->2^6  +  2--->2^1

100010

3. 计算机验算

十进制转二进制:使用位运算符进行转换

#include <stdio.h>

void decToBinary(int n) {
    int binaryNum[32];
    int i = 0;
    while (n > 0) {
        binaryNum[i] = n % 2;
        n = n / 2;
        i++;
    }
    for (int j = i - 1; j >= 0; j--)
        printf("%d", binaryNum[j]);
}

int main() {
    int n = 17;
    decToBinary(n);
    return 0;
}

2进制  --->  8进制

(满8进1  最大是7  以0开头)

一个八进制的数可以用3位二进制的数表示

7---> 111 6---> 110 5---> 101 4---> 100 3---> 011 2---> 010 1---> 001

001 010 101 011--->  01253

1. 首先,将二进制数转换为十进制数。
2. 然后,将十进制数转换为八进制数。

#include <stdio.h>
#include <math.h>

int binaryToDecimal(int binary) {
    int decimal = 0, i = 0, remainder;
    while (binary != 0) {
        remainder = binary % 10;
        binary /= 10;
        decimal += remainder * pow(2, i);
        ++i;
    }
    return decimal;
}

int decimalToOctal(int decimal) {
    int octal = 0, i = 1;
    while (decimal != 0) {
        octal += (decimal % 8) * i;
        decimal /= 8;
        i *= 10;
    }
    return octal;
}

int main() {
    int binary;
    printf("Enter a binary number: ");
    scanf("%d", &binary);
    printf("Octal: %d", decimalToOctal(binaryToDecimal(binary)));
    return 0;
}

8进制  --->  2进制

一个8进制的数可以用3位二进制的数表示

075 ---> 111  101

031 ---> 011  001

首先,你需要创建一个数组,其中包含八进制数对应的二进制数。然后,对于输入的每个八进制数,你可以直接从数组中找到对应的二进制数。

#include <stdio.h>

int main() {
    char octalToBinary[8][4] = {"000", "001", "010", "011", "100", "101", "110", "111"};
    char octal[1000];
    printf("请输入一个八进制数: ");
    scanf("%s", octal);
    printf("二进制数为: ");
    for(int i = 0; octal[i] != '\0'; i++) {
        int digit = octal[i] - '0';
        printf("%s", octalToBinary[digit]);
    }
    printf("\n");
    return 0;
}

2进制  --->  16进制

(满16进1  最大是15  1-9 1-f  以0x开头)

15:1111 14:1110 13:1101 12:1100 11:1011 10:1010 9:1001

  8:1000   7:0111   6:0110   5:0101   4:0100   3:0011 2:0010

  1:0001

一个16进制的数可以用4位二进制的数表示

0010 0010 1010 ---> 0x22a

0011 0010 1010 ---> 0x32a

可以使用sprintf函数将二进制转换为十六进制

#include <stdio.h>

int main() {
    int binary = 1010; // 二进制数
    int hex;

    // 使用sprintf函数将二进制转换为十六进制
    sprintf((char*)&hex, "%x", binary);

    printf("二进制数 %d 对应的十六进制数为 %x\n", binary, hex);

    return 0;
}

16进制  --->  2进制

一个16进制的数可以用4位二进制的数表示

0x45 --->    0100 0101

0xf65 ---> 1111  0110 01013

将十六进制转换为二进制的一个简单方法是首先将十六进制转换为十进制,然后将十进制转换为二进制

#include <stdio.h>

void hexToBin(char* hexdec) 
{ 
    long int i = 0; 
  
    while (hexdec[i]) { 
        switch (hexdec[i]) { 
        case '0': 
            printf("0000"); 
            break; 
        case '1': 
            printf("0001"); 
            break; 
        case '2': 
            printf("0010"); 
            break; 
        case '3': 
            printf("0011"); 
            break; 
        case '4': 
            printf("0100"); 
            break; 
        case '5': 
            printf("0101"); 
            break; 
        case '6': 
            printf("0110"); 
            break; 
        case '7': 
            printf("0111"); 
            break; 
        case '8': 
            printf("1000"); 
            break; 
        case '9': 
            printf("1001"); 
            break; 
        case 'A': 
        case 'a': 
            printf("1010"); 
            break; 
        case 'B': 
        case 'b': 
            printf("1011"); 
            break; 
        case 'C': 
        case 'c': 
            printf("1100"); 
            break; 
        case 'D': 
        case 'd': 
            printf("1101"); 
            break; 
        case 'E': 
        case 'e': 
            printf("1110"); 
            break; 
        case 'F': 
        case 'f': 
            printf("1111"); 
            break; 
        default: 
            printf("\nInvalid hexadecimal digit %c", 
                   hexdec[i]); 
        } 
        i++; 
    } 
} 

int main() 
{ 
    char hexdec[100] = "1A3F"; 
    printf("\nEquivalent Binary value is : "); 
    hexToBin(hexdec); 
    return 0; 
} 

练习

110 01101010转成8 10 16进制:

八进制:03152

十进制:1642

十六进制:0x66a

11110110

八进制:0366

十进制:246

十六进制:0xf6


非数值型的数据

ascii码值:man ascii

 ascii

'\0'  

0-9

A-Z

a-z

十进制

0

48-57

 65-90

97-122

字符型数字转数字      -48

大写字母转小写字母  +32

小写字母转大写字母   -32

man手册:第一章shell命令    第三章库函数  按q键退出


点个赞吧,谢谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值