rekensom in C

trix

Golden Member

verdorie..ja klopt :(
tnx.

typisch geval van eerst vragen en dan nadenken :)

edit: maar bij nader inzien, ik heb nu een long i.p.v. een int
dan werkt het dacht ik anders.

edit: even wat duidelijker vertellen.

ik heb een variabele X die gedeclareerd is als een long hier in kan een getal staan (in mijn geval) van 1 t/m 300.
stel er staat in 23, nu zou ik graag willen weten dat dat getal in de 3e byte staat. dan kan ik denk ik nog steeds gewoon door 8 delen ?

eigenwijs = ook wijs
trix

Golden Member

ik moet er onverwachts van door, ik reageer later.

eigenwijs = ook wijs

Op 21 februari 2021 09:56:11 schreef trix:
edit: maar bij nader inzien, ik heb nu een long i.p.v. een int
dan werkt het dacht ik anders.

nee, een long werkt niet anders als een INT.
bewijs:
https://onlinegdb.com/N_eRyPczp

@dk zijn scanner is geloof ik nu 3 meter, (300 sensoren met 10mm tussenruimte)

Met een long kan hij de hele planeet scannen :D

[Bericht gewijzigd door Progger op zondag 21 februari 2021 15:51:25 (18%)

GMT+1

Waarom gebruik je een long voor een getal van 300?

trix

Golden Member

een integer gaat toch maar tot 255, en de eerst volgende is toch een long. of heb ik dat mis ?

eigenwijs = ook wijs
trix

Golden Member

in die link is een int 16-bits.
dat is toch (ik dacht) compiler afhankelijk.

bij mij is hij 8-bit.

eigenwijs = ook wijs

als je uint16_t gebruikt forceer je unsigned 16 bits onafhankelijk van de compiler.
Of een van de andere types met vaste grootte: https://www.cplusplus.com/reference/cstdint/

Daarvoor heb je stdint.h nodig

Geen idee welke compiler je gebruikt maar ik ben er nog nooit een tegengekomen waarbij de int 8 bits is.

reading can seriously damage your ignorance
trix

Golden Member

dat uint16_t heb ik wel vaker gezien. ik gebruik de compiler die bij atmel studio 7 zit.

eigenwijs = ook wijs

Die compiler is gcc en die heeft op AVR 16 bit ints.

Een "int" die maar tot 255 gaat is niet houdbaar, dus is gekozen voor 16 bit ints. Bovendien, integer-datatypes in C zijn char short int long longlong hierbij is volgens de standaard iedere volgende even lang of langer dan de volgende. aangezien je de hele range 8, 16, 32 64 wilt bedienen is niet zo heel veel schuifruimte mogelijk. Als je "int" 8 bits zou maken dan zijn er maar 2 namen voor de drie langere datatypes. Dat is kan eigenlijk niet.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
trix

Golden Member

een int is 16 bits in gcc.
dan moet ik het een en ander opnieuw declareren :)

eigenwijs = ook wijs

Dubbelcheck het zelf even:

code:


printf ("Int is %d bytes\n", sizeof (int));

Verder: Anderen hebben het al gezegd: Doe "#include <stdint.h>" aan het begin van je programma en gebruik uint16_t voor een 16-bit variabele. (ik doe het zelf zelden, maar dat is niet goed. Ik ga proberen m'n leven te beteren... ).

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/