---
title: "Några funktionen vill jag ha"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/125758-några-funktionen-vill-jag-ha"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "CoyPu"
published: "2005-04-05T10:27:34.000Z"
updated: "2005-04-09T00:43:28.000Z"
replies: 7
views: 406
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/125758-några-funktionen-vill-jag-ha"
---

# Några funktionen vill jag ha

## #1 — CoyPu, 2005-04-05T10:27Z

Hej!
Jag begöver hitta en funktion som utför komplex FFT på en array med samplade värden (doubles).

Sen skulle jag vilja ha en funktion som vänder på bitarna i ett ord. Tex  010011 -\> 110010.

Finns det någon som har en sådan eller vet vart man kan hitta dessa funktioner skrivna i c.

//Christer

Permalänk: https://www.webforum.nu/p/125758

## #2 — Gein, 2005-04-05T10:34Z

Det här är inget du kan använda dig av för fouriertransformeringen?
<http://www.koders.com/c/fidEE435C66F2D190A553938790DA4C01279695FDF4.aspx>

Permalänk: https://www.webforum.nu/p/1587524

## #3 — CoyPu, 2005-04-05T10:44Z

Vid en snabb blick så ser det mkt bra ut. skall sätta mig och kolla koden närmare i kväll :)

Tack så mkt :)

Permalänk: https://www.webforum.nu/p/1587527

## #4 — pimme, 2005-04-05T11:44Z

Ett annat tips för fft är <http://www.fftw.org/>

För att vända på bitarna, funkar inte \~ ?

Permalänk: https://www.webforum.nu/p/1587549

## #5 — Sang-drax, 2005-04-06T19:38Z

> **pimme skrev:**
>
> För att vända på bitarna, funkar inte \~ ?

Nej.

Jag kommer inte på något smart och smidigt sätt att vända på bitarna, så det blir nog till att manuellt flytta omkring dem.

Permalänk: https://www.webforum.nu/p/1588255

## #6 — CoyPu, 2005-04-06T19:44Z

> Nej.
> 
> Jag kommer inte på något smart och smidigt sätt att vända på bitarna, så det blir nog till att manuellt flytta omkring dem.

 

Då e det inte bara jag som har kommiit fram till detta. fråga för att hoppas att någon skulle komma på nått bra sätt... men då får jag skriva en själv som slänger runt bitarna..

Tack ändå

Permalänk: https://www.webforum.nu/p/1588256

## #7 — CoyPu, 2005-04-07T22:24Z

Om någon skulle behöva den koden som "vänder" på bitarna så kommer den här :) hittad på nätet :)

```php
#include <stdio.h>
#include <math.h>

#define SBYTE 8
#define SSBYTE 16
#define IBYTE 32

void ByteShift(int);
void ShortByteShift(short);
void IntShift(int);

int main()
{
   int nNum;

   printf("Enter a number:");
   scanf("%d", &nNum);

   if (nNum <= 255) {
      printf("The nNum is 1 byte..\n");
      ByteShift(nNum);
   }
   else if (nNum <= 65535) {
      ShortByteShift(nNum);
      printf("The nNum is 2 byte...\n");
   }
   else{
      IntShift(nNum);
      printf("The nNum is 4 byte..\n");
   }

   return 0;   
}

void ByteShift(int nVal)
{
   int nLoop;
   int nShift;
   int nRes;
   int nCount;
   int nTmp;

   int nValue;

   nTmp = 0;
   nRes = 0;
   nValue = nVal;
   
   for(nLoop=0;nLoop<SBYTE;nLoop++)
   {
      nCount=nLoop+1;
      nTmp=(int)pow(2,nLoop);
      nTmp &= nValue;
      if (nTmp > 0) {
         nShift = 0;
         nShift = SBYTE - (nLoop + nCount);
         if(nShift > 0)
            nTmp = nTmp << nShift;
         else
            nTmp = nTmp >> abs(nShift);
         nRes |= nTmp;
      }
   }
   printf("Value is : %d\n", nRes);
}

void ShortByteShift(short sVal)
{
   int nLoop;
  int nShift;
  int nRes;
  int nCount;
  int nTmp;

  int nValue;

  nTmp = 0;
  nRes = 0;
  nValue = sVal;

  for(nLoop=0;nLoop<SSBYTE;nLoop++)
  {
      nCount=nLoop+1;
      nTmp=(int)pow(2,nLoop);
      nTmp &= nValue;
      if (nTmp > 0) {
        nShift = 0;
          nShift = SSBYTE - (nLoop + nCount);
        if(nShift > 0)
          nTmp = nTmp << nShift;
        else
          nTmp = nTmp >> abs(nShift);
        nRes |= nTmp;
      }
  }
  printf("Value is : %d\n", nRes);
   return;
}

void IntShift(int nVal)
{
   int nLoop;
  int nShift;
  int nRes;
  int nCount;
  int nTmp;

  int nValue;

  nTmp = 0;
  nRes = 0;
  nValue = nVal;

  for(nLoop=0;nLoop<IBYTE;nLoop++)
  {
    nCount=nLoop+1;
    nTmp=(int)pow(2,nLoop);
    nTmp &= nValue;
    if (nTmp > 0) {
      nShift = 0;
        nShift = IBYTE - (nLoop + nCount);
      if(nShift > 0)
        nTmp = nTmp << nShift;
      else
        nTmp = nTmp >> abs(nShift);
      nRes |= nTmp;
    }
  }
  printf("Value is : %d\n", nRes);

   return;
}
```

Permalänk: https://www.webforum.nu/p/1588961

## #8 — Sang-drax, 2005-04-09T00:43Z

Det var en konstig kod du hittade, en massa onödiga variabler som inte behövs och varför sätta nShift till 0 för att på raden efter ändra på den?

I C++ löser man det snabbt och lätt för alla typer med typmallar:

```
template<typename T> T mirror(T tal)
{
    T val=0;
    for (int p=0;p<8*sizeof T;++p)
        val |= ((tal & (1<<p))!=0?1:0) << 8*sizeof T-p-1;
    return val;
}
```

Vill du använda C får du plocka bort template\<\> och byta ut T mot den typ som önskas.

Permalänk: https://www.webforum.nu/p/1589593

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/125758-några-funktionen-vill-jag-ha
