problem mit ?: oder grippe



  • hola

    kurzer code:

    const unsigned int INTSIZE = sizeof(int);
    
    const unsigned int INTSIZEMASK = ~(INTSIZE - 1);
    
       inline unsigned int AlignSize(unsigned int t_value)
       {
          return (t_value & INTSIZE) ? (t_value & INTSIZEMASK) + INTSIZE :
                                       t_value; // (1)
       }
    

    wenn ich der obrigen funktion irgendeinen wert uebergebe, 13,51,91 usw., dann gibt er mir ueber(1) immer den uebergebenen wert zurueck. also immer der else-zweig. ich steh total daneben und seh den fehler nicht.
    wo liegt er ?

    Meep Meep



  • #include<iostream> 
    
    using namespace std; 
    
    const unsigned int INTSIZE = sizeof(int); 
    
    const unsigned int INTSIZEMASK = ~(INTSIZE - 1); 
    
       inline unsigned int AlignSize(unsigned int t_value) 
       { 
          return (t_value & INTSIZE) ? (t_value & INTSIZEMASK) + INTSIZE : 
                                       t_value; // (1) 
       } 
    
    int main () 
    { 
        for(int i=0;i<20;++i)
            cout<<i<<' '<<AlignSize(i)<<endl;
    }
    

    gibt bei mir aber

    0 0
    1 1
    2 2
    3 3
    4 8
    5 8
    6 8
    7 8
    8 8
    9 9
    10 10
    11 11
    12 16
    13 16
    14 16
    15 16
    16 16
    17 17
    18 18
    19 19
    

    aus.

    es macht also was und geht nicht immer über (1).

    aber deinen code verstehe ich eh nicht. ich mach's mal neu.

    inline unsigned int AlignSize(unsigned int t_value) 
    {
        return (t_value+sizeof(int)-1)&(~(sizeof(int)-1));
    }
    

    ergibt

    0 0
    1 4
    2 4
    3 4
    4 4
    5 8
    6 8
    7 8
    8 8
    9 12
    10 12
    11 12
    12 12
    13 16
    14 16
    15 16
    16 16
    17 20
    18 20
    19 20
    


  • danke, fuer den denkanstoss. jetz hab ich meine fehler auch gesehen.
    wald und baeume und so. wird echt immer schlimmer. ich glaub ich fang zum bingo spielen an.

    Meep Meep


Anmelden zum Antworten