copy_sign() für int?

Gast #4450203
Nicht dass es jetzt wirklich wichtig wäre, aber ich frage mich gerade, 
wie man für int die Funktion copy_sign() schreibt. Also jetzt eher auf 
dem PC. If soll man ja wohl eher vermeiden, wegen Branch Prediction oder 
so. Also eher die zweite Form? Für Float gibt es copy_sign ja 
vordefinert.
1
#include <stdlib.h>
2
int copy_sign(int a, int b)
3
{
4
  //return (b < 0 ? -abs(a) : abs(a));
5
  return abs(a) * (b/b);
6
}
Gast
Da hast Du wohl recht, ich wollte eigentlich schreiben
1
#include <stdlib.h>
2
int copy_sign(int a, int b)
3
{
4
  //return (b < 0 ? -abs(a) : abs(a));
5
  return abs(a) * (abs(b)/b);
6
}
Gast
Man könnte ja auch das Vorzeichenbit ausmaskieren und kopieren... 
Vorusgesetzt, das INT_MAX Makro ist korrekt gesetzt.
1
return ((a & INT_MAX) | (b & (INT_MAX + 1)))
Gast
Jay schrieb:
> int copy_sign(int v, int s)
> {
>   int candidates[] = { v, -v, -v, v };
>
>   return candidates[((s < 0) << 1) & (v < 0)];
> }

Ehm:
1
int copy_sign(int v, int s)
2
{
3
  int candidates[] = { v, -v, -v, v };
4

5
  return candidates[((s < 0) << 1) | (v < 0)];
6
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.