probleme mit großen zahlen

#3027048
Lesenswert?

hallo,

ich habe zwei probleme, deren ursache ich nicht erkennen kann. Ich 
simuliere übrigens einen attiny45.

1)

ich lasse über dieses programm den debugger vom atmel studio laufen:
Warum ändern sich die Werte von "pos" und "wert" nicht? Wenn ich sie 
innerhalb von main deklariere funktioniert das so, wie es soll.
1
#include <avr/io.h>
2

3
  unsigned int pos = 0;
4
  uint64_t wert=0;
5
  uint64_t komb=0xFFFFFFFF;
6

7

8
int main(void)
9
{
10
  while(1)
11
    {
12
    wert |= (1<<pos);
13
    pos++;
14
    
15
    if(wert>=komb) {
16
      pos=0;
17
      wert=0;
18
    }          
19
    }
20
}

2) nun der fall, dass die variablen in main deklariert sind:
Problem hier: Wenn "pos" den Wert 16 erreicht, Springt "wert" beim 
nächsten mal oder-verknüpfen mit der um pos verschobenen 1 auf 
0xffffffffffffffff! Bis Verschiebung um 15 sind die Werte immer (so wie 
sie sollen) bei 2^pos-1
1
#include <avr/io.h>
2

3

4

5
int main(void)
6
{
7
  unsigned int pos = 0;
8
  uint64_t wert=0;
9
  uint64_t komb=0xFFFFFFFF;
10

11
  while(1)
12
    {
13
    wert |= (1<<pos);
14
    pos++;
15
    
16
    if(wert>=komb) {
17
      pos=0;
18
      wert=0;
19
    }          
20
    }
21
}

was passiert hier?

danke im voraus!
Gast #3027057
Lesenswert?

Adrian Figueroa schrieb:
> Wenn "pos" den Wert 16 erreicht, Springt "wert" beim
> nächsten mal oder-verknüpfen mit der um pos verschobenen 1 auf
> 0xffffffffffffffff!

ja, weil in C alles mit int gerechnet wird. Und int hat hier nun mal 
16bit.


> (1<<pos);

hierst musst du dem comnpiler sagen, der er mit 64bit arbeiten soll

( (uint64_t)1<<pos);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren