十进制到二进制的转换

这个是怎么转的呀。有什么讲的清楚的呢?上课听了好几遍,还是不懂。什么补码这些的,都是干什么的呢?

可以看一下我之前整理的:
十进制与二进制转换(负数+正数)
https://blog.csdn.net/lydms/article/details/95883512

除非你要计算负数,否则用不到补码
一个n进制数,可以表示为 个位 + 倒数第二位 * n + 倒数第三位 * n的平方 + 倒数第四位 * n的立方 + ...
比如十进制的1234 = 4 + 30 + 200 + 1000,也就是4 + 3 * 10 + 2 * 10^2 + 1 * 10^3
二进制也一样,比如11001 = 1 + 0 * 2 + 0 * 4 + 1 * 8 + 1 * 16
所以说把10进制转换为2进制,比如说把25转换成2进制,那么就是
25 / 2 = 12 ... 1
12 / 2 = 6 ... 0
6 / 2 = 3 .. 0
3 / 2 = 1 .. 1
1 / 2 = 0 ... 1
0 / 2 = 0 ... 0
... 再往下都是0,就不写了
把以上余数倒过来写,11001就是对应的2进制(前面的前导0无论多少都可以忽略,好比00123 0123 123都是123)
所以,计算机来转换,是一样的道理,循环除以2,直到为0


#include <stdio.h>

int main() {
    int n = 25;
    int binary[32] = {0}; // 用于存储二进制位的数组,最多需要 32 位
    int i = 0;
    while (n > 0) {
        binary[i++] = n % 2; // 计算二进制位,保存到数组中
        n = n / 2;
    }
    printf("25 的二进制表示为:");
    for (int j = i - 1; j >= 0; j--) { // 逆序输出数组中的二进制位
        printf("%d", binary[j]);
    }
    printf("\n");
    return 0;
}