probleme mit großen zahlen

OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.