int cSource::Position(int Code) auf CPUs bei denen int 64 bits hat

  • Hi,

    Wenn int 32 bits hat, ist

    Code
    cSource::Position(-5) = -5

    . Wenn int 64 bits hat, ist

    Code
    cSource::Position(-5) = 4294967291

    (?).

    ~ Markus

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • MarkusE September 30, 2024 at 8:13 AM

    Changed the title of the thread from “int cSource::Position(int Code) auf CPUs bei denen in 64 bits hat” to “int cSource::Position(int Code) auf CPUs bei denen int 64 bits hat”.
  • Liegt wohl an

    Code
    int cSource::Position(int Code)
    {
      int n = (Code & st_Pos);
      if (n > 0x00007FFF)
         n |= 0xFFFF0000;
      return n;
    }

    Versuch's mal mit n = ~n; oder n= -n;.

    Nein, besser n = -((n & ~0x00008000) + 1);

    25 Jahre VDR! Mach mit beim VDR User Counter!

    Edited once, last by kls (September 30, 2024 at 8:53 AM).

  • Das könnte auch gehen (nicht getestet)

    Code
    #include <stdint.h>
    
    int cSource::Position(int Code)
    {
      return (int16_t) Code;
    }
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler


    to spoil
    verderben
    beschädigen
    plündern
    behindern
    berauben
    vereiteln
    rauben
    zerstören [fig.] [verderben, verunstalten]
    vergällen
    verhageln [fig.]

  • Hi,

    Ich habe mit

    Code
    int64_t cSource::Position(int64_t Code)                                                                                                                     {                                                                                                                                                             return (int16_t) Code;                                                                                                                                                                                                                                                                                             } 

    getestet, und da kommt

    Code
    cSource::Position(5) = 5
    cSource::Position(-5) = -5

    Raus. Also dieser Testfall funktioniert.

    Einen richtigen Praxistest kann ich nicht machen, ich bekomme hier nur Astra.

    ~Markus

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • Was ist das eigentlich für eine CPU? Also x86 schon mal nicht.

    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler


    to spoil
    verderben
    beschädigen
    plündern
    behindern
    berauben
    vereiteln
    rauben
    zerstören [fig.] [verderben, verunstalten]
    vergällen
    verhageln [fig.]

  • Code
    int64_t cSource::Position(int64_t Code)

    wäre eine unnötige API Änderung.

    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler


    to spoil
    verderben
    beschädigen
    plündern
    behindern
    berauben
    vereiteln
    rauben
    zerstören [fig.] [verderben, verunstalten]
    vergällen
    verhageln [fig.]

  • Der letzte Test von MarkusE garantiert nicht, dass die obersten Bits komplett ignoriert wurden.

    Vllt. noch mal gegentesten mit so etwas ähnlichem auf dem 64bit-int:


    int16_t position = -5; // "S5W"

    int code = 'S', code <<= 24; // satellite Prefix shifted

    code |= position;

    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler


    to spoil
    verderben
    beschädigen
    plündern
    behindern
    berauben
    vereiteln
    rauben
    zerstören [fig.] [verderben, verunstalten]
    vergällen
    verhageln [fig.]

  • Hätte der cast mit erledigt, aber why not. :)

    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler


    to spoil
    verderben
    beschädigen
    plündern
    behindern
    berauben
    vereiteln
    rauben
    zerstören [fig.] [verderben, verunstalten]
    vergällen
    verhageln [fig.]

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!