10.17学习

发布于:2024-10-18 ⋅ 阅读:(8) ⋅ 点赞:(0)

1.二进制

二进制是一种基数为2的数制,它只使用两个数字:0和1。二进制数在计算机科学和数字电路中非常常见,因为它们可以很容易地被电子设备处理。

①二进制数的书写:

二进制数通常由一串0和1组成,例如: 1011 、 1101 。

②二进制数的位:

二进制数中的每一位称为一个“比特”(bit),它是二进制数的最小单位。

从右向左数,第一位是最低有效位(Least Significant Bit,LSB),最后一位是最有效位(Most Significant Bit,MSB)。

③二进制数的位权:

每一位的值取决于它的位置,每一位的值是2的幂次方,从0开始。

例如,在二进制数 1011 中:

最右边的位(LSB)是2^0 = 1。

接下来的位是2^1 = 2。

再接下来的位是2^2 = 4。

最左边的位(MSB)是2^3 = 8。

④二进制数的表示:

二进制数可以表示整数和分数。

整数的表示:每一位上的数字乘以其位权,然后求和。例如,二进制数 1011 表示的十进制数是1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 = 8 + 0 + 2 + 1 = 11。

分数的表示:二进制分数使用小数点后的位置,每一位的值是2的负幂次方。例如,二进制数 0.101 表示的十进制数是1 \times 2^{-1} + 0 \times 2^{-2} + 1 \times 2^{-3} = 0.5 + 0 + 0.125 = 0.625。

⑤二进制数的前缀:

在编程和文档中,二进制数通常用前缀 0b 或 0B 来表示,以区分其他进制的数。例如: 0b1011 。

 

2.二进制转换

二→八

八进制数的每一位正好对应二进制数的三位。

①从右向左分组:首先,从二进制数的最右边开始,将二进制数字每三位分为一组。如果最左边的组不足三位,可以在前面补零,直到这组也包含三位。

②转换每组为八进制:然后,将每组三位二进制数转换为对应的八进制数。二进制的000到111分别对应八进制的0到7。

注:

二进制的 000 对应八进制的 0 

二进制的 001 对应八进制的 1 

二进制的 010 对应八进制的 2 

二进制的 011 对应八进制的 3 

二进制的 100 对应八进制的 4 

二进制的 101 对应八进制的 5 

二进制的 110 对应八进制的 6 

二进制的 111 对应八进制的7

③组合八进制数:最后,将转换后的八进制数字组合起来,就得到了最终的八进制数。

 

eg:将二进制数 11010110 转换为八进制数:

step1分组:首先,我们从右向左将二进制数分组,每三位一组:

 110 101 10 (注意最左边的组如果不足三位,我们在前面补零,变成 011 010 110 )

step2 转换:然后,我们将每组二进制数转换为对应的八进制数:

 011 (二进制)=  3 (八进制)

 010 (二进制)=  2 (八进制)

 110 (二进制)=  6 (八进制)

step3 组合:最后,我们将这些八进制数字组合起来,得到最终的八进制数:

 326 (八进制)

所以,二进制数 11010110 转换为八进制数是 326 。

 

3.进制在c中的使用

在C语言中,进制转换通常涉及到将数字从一个进制转换为另一个进制。进制是指数字系统的基数,常见的进制包括:

1. 二进制(Binary):基数为2,使用0和1两个数字。

2. 八进制(Octal):基数为8,使用0到7的数字。

3. 十进制(Decimal):基数为10,使用0到9的数字。

4. 十六进制(Hexadecimal):基数为16,使用0到9以及A(10)、B(11)、C(12)、D(13)、E(14)、F(15)的字母。

在C语言中,可以使用以下方法进行进制转换:

 

①字符串格式化输出:使用 printf 函数的格式说明符来实现进制转换。

 %d  或  %i :十进制整数

 %o :八进制整数

 %x  或  %X :十六进制整数( %x 使用小写字母, %X 使用大写字母)

 

示例代码:

int num = 255;

printf("十进制: %d\n", num);

printf("八进制: %o\n", num);

printf("十六进制: %x\n", num);

 

②使用库函数:C语言标准库提供了一些函数来进行进制转换,如 strtol 和 strtoul 等,这些函数可以将字符串转换为指定进制的数值。

示例代码:

 

#include <stdlib.h>

 

char *str = "1A3"; // 假设这是一个十六进制数的字符串

int base = 16; // 指定转换的进制

long int value = strtol(str, NULL, base); // 将字符串转换为十进制数

printf("转换后的十进制数为: %ld\n", value);

 

③手动转换:通过编写算法手动实现进制转换,例如,将十进制数转换为二进制、八进制或十六进制数。

示例代码(十进制转二进制):

 

#include <stdio.h>

 

void decimalToBinary(int decimal) {

int binary[32], i = 0;

while (decimal > 0) {

binary[i++] = decimal % 2;

decimal = decimal / 2;

}

printf("二进制: ");

for (int j = i - 1; j >= 0; j--) {

printf("%d", binary[j]);

}

printf("\n");

}

 

int main() {

int num = 13;

decimalToBinary(num);

return 0;

}