这个是怎么转的呀。有什么讲的清楚的呢?上课听了好几遍,还是不懂。什么补码这些的,都是干什么的呢?
可以看一下我之前整理的:
十进制与二进制转换(负数+正数)
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;
}
int arr[3] = {1,2,3};
int*p = arr;
for(;p!=arr+3;p++){
printf("%d\n",*p);
}
return 0;
}