zoukankan      html  css  js  c++  java
  • 快速离散傅里叶变中的倒位序号问题

    之前写过一篇关于倒位序号的算法,实现简单,但是算法不易理解。再写一个容易理解,但是感觉很low的。。。。

    首先解释一下倒位序号。。

    倒位序号就是指将数n的二进制码的位序颠倒后的数n^,比如说n=6,6的二进制数为110,倒序就为011,那么n^就等于3;

    基本的思路就是,先求n的二进制数,利用的方法就是经典的“初二取余法”,求出来的就是倒序的二进制;

    最后在将二进制转换成对应的十进制即可。。。

    给出代码(只实验了8个数的)

    #include<math.h>
    #include<stdio.h>
    #include<stdlib.h>
    #define N 8
    int reverse(int scr,int num);
    int main()
    {
        int scr[N]={0,1,2,3,4,5,6,7};
        printf("原数组为:
    ");
        for(int i=0;i<N;i++)
        {
            printf("%d  ",scr[i]);
        }
        printf("
    ");
    
        int des[N];
    
    
        int n=0; //求有几个二进制位,比如8个数对应3个二进制位,16个对应4个二进制位
        int num=N;
        while(  (num/2)  !=0)
        {
            num=num/2;
            n++;
        }
    //
        for( i=0;i<N;i++)
        {
            des[i]=reverse(scr[i],n);
        }
    
    
        printf("变化后的数组为:
    ");
        for(i=0;i<N;i++)
        {
            printf("%d  ",des[i]);
        }
        printf("
    ");
    
        return 0;
    }
    
    //位码倒序的实现函数
    //输入参数为原位,输出为其倒序
    //返回值为二进制的位数
    int reverse(int scr,int n)
    {
        
        
    
        //用于保存将十进制转换成的二进制(是倒序的)
        int binary[10]={0};//2的10次方就是1024如果仅仅是验证算法,这点空间就够了
        //利用商余法求十进制数对应的二进制(倒序)
        int index=0;//用于控制下标移动
    
        while(   scr  !=0   )
        {
            
            binary[index]=scr%2;//求余数
            scr=scr/2;//求商,作为下次的被除数
            index++;
        }
        
        //然后把binary转换成十进制
    
        int sum=0;//
    
        for(int i=0;i<n;i++)
        {
        
            sum+=binary[i]*pow( 2, (n-i-1) );
    
        }
    
        return sum;
    }
  • 相关阅读:
    nsight system
    unity 拿到管线权限的解决方案
    Erlang cowboy 入门参考
    [Erlang]Mnesia分布式应用
    erlang浅谈
    erlang 中带下划线变量的使用
    erlang 符号相关基本语法
    Erlang与ActionScript3采用JSON格式进行Socket通讯
    Erlang游戏开发-协议
    Erlang之IO编程
  • 原文地址:https://www.cnblogs.com/qingergege/p/5383094.html
Copyright © 2011-2022 走看看