二进制 八进制 十进制 十六进制
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键退出
点个赞吧,谢谢大家!