有人可以解释一下 for 循环如何反转数组中的元素吗?

Can someone explain me how the for loop reverses the elements in the array?

程序目的:将十进制数转换成二进制数。

我的问题:这里的 for 循环如何在数组中反向打印元素? for(i=i-1; i>=0; i--) 是什么意思?

(我也很感激,如果你给我一些关于我的代码的反馈,以及如何让它看起来更好更好,谢谢!)

#include <stdio.h>

int main()
{
  int i;
  int num;
  int BinArray[32];
   
  printf("Enter a decimal number: ");

  scanf("%d", &num);
   
  for(i=0; num>0; i++){
      
     if(num % 2 == 0)
        BinArray[i] = 0;
     else
        BinArray[i] = 1;     
        num = num / 2;
    }

    // I don't understand how it prints the binary numbers in reverse, what happened?

    for(i=i-1; i>=0; i--) {
        printf("%d", BinArray[i]);
    } 

    return 0;
}

变量i包含进入该循环的元素个数

for(i=0; num>0; i++){
  
  if(num % 2 == 0)
    BinArray[i] = 0;
  else
    BinArray[i] = 1;
    
    num = num / 2;
}

因为在为数组的元素赋值后 BinArray 变量 i 在 for 循环中递增 i++.

所以i - 1指向数组的最后一个元素BinArray。从最后一个元素开始直到索引等于0的元素(因为变量i递减i--)数组的所有元素都在这个for循环中输出

for(i=i-1; i>=0; i--) {
    printf("%d", BinArray[i]);
} 

在第一个循环中,num每一步减半,所以它越来越小,但是索引i越来越大,所以位从高(从索引0开始)到低排序。在第二个循环中,索引从大开始并减少到 0,因此这些位从低(左)到高(右)打印出来。如果要从高位到低位打印出来,第二次循环需要从0开始索引,递增到最后一个位的位置,如下。

for(num = 0; num < i; num++) {  /* assume num will not be used again */
    printf("%d", BinArray[num]);
}