Dag,

Van decimaal naar binair (en anders om)lukt mij wel.
Maar als ik bv. 01001010 naar een register wil schrijven hoe geef ik dit dan aan? Ik weet dat je het moet opdelen in twee gedeelten.

Kan iemand me vertellen hoe die weergave heet? 0xff enz.? is dat hexaans? En is er ergens een uitleg over hoe je het omzet?

hoeveel bits is je register en welke programmeertaal is het?

Hexaans? Hexadecimaal please ;)

Hexadecimaal:

Opdelen in blokjes van 4:
0100 1010
decimaal:
4 en 10
Hexadecimaal gaat van 0 to f (0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f) 0 tot 16 dus eigenlijk:
is dus gewoon 0x4A

0100 1010 bestaat uit twee nibbles. Elke nibble gaat van 0 tot en met F (1111 ofte 15). Die plaats je gewoon na mekaar.
In jouw voorbeeld is dat 0x4A, want 0100 = 4 en 1010 = A.

als je binar naar hex wilt moet je de 8 bits opdelen in 2 groepjes van 4 dit worden "nibbles" genoemd.

dus bijvoorbeeld 0b01101110 verdeel je in 0110 en in 1110.
Dan bepaal je van die 2 groepjes hun hexadecimale waarde.

0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = 8
1001 = 9
1010 = A (decimaal 10)
1011 = B (decimaal 11)
1100 = C (decimaal 12)
1101 = D (decimaal 13)
1110 = E (decimaal 14)
1111 = F (decimaal 15)

dit plak je weer achter elkaar dus 0b01101110 verdeel je in 0110 en in 1110.
0110 = 6 en 1110 = E.

0b01101110 is dus gelijk aan 0x6E.

Op 30 augustus 2011 22:17:44 schreef heggico:
Hexadecimaal:

0100 1010
decimaal:
4 en 10

Ik zie nog niet helemaal hoe je aan die 4 en 10 komt

Bedoel je niet gewoon 0b01001010

haha in de tussentijd al 4 andere met het antwoord. Het is primetime hier op CO

0100 1010
Ik zie nog niet helemaal hoe je aan die 4 en 10 komt

0100 -> 22 = 4
1010 -> 23+21=10

Dus het is altijd 0x? Daarmee geeft je aan dat het een hexadecimaal getal is?

Ja, als op een plek waar een getal kan staan iets begint met "0x" dan wordt de rest als een "hexadecimaal" getal gezien.

Als het begint met een "0", maar niet met "0x" dan wordt het gezien als een octaal getal. Dat was 35 jaar geleden wel eens handig.


 a = 210;
 b = 140;
 c = 070;

levert dus een verrassing op: c krijgt de waarde 56! (070(oct) = 0*8^2 + 7 * 8 + 0 = 56)

Op 31 augustus 2011 07:49:17 schreef rew:
Dat was 35 jaar geleden wel eens handig.

Dat stomme feature mogen ze zo van mij uit alle C compilers slopen.
Levert meer ellende op dan het nog ooit gebruikt wordt.

Helemaal mee eens. Ik ben ook meerdere malen in die vieze valkuil getuimeld.
Het mag dan zo zijn, dat een ezel zich geen tweemaal aan dezelfde steen stoot, maar over valkuilen wordt met geen woord gerept!

Is het niet zo dat binair (dus 0bxxx) niet standaard geïmplementeerd is in de ANSI C standaard? Ben vroeger wel eens heel lang bezig geweest alles te converteren.

Dat was een betere keuze geweest om te implementeren dan octaal.
Binair zit er dus niet in.

[Bericht gewijzigd door henri62 op (18%)]

Ik denk dat Jovak en ik de enigen hier zijn die nog met oktaal werken, in de adressering van de transponders voor secundaire radar.

Ik al langer trouwens, want de scheepssatelllietverbinding had ook al oktale adressen.

Je kunt het je nu niet meer voorstellen, maar er is echt een tijd geweest dat het logisch leek binaire getallen te groeperen per DRIE bits. Niet per vier, vond men; er was immers geen enkel schakelmateriaal (duimwielschakelaars, numitron displays) wat boven de negen kon komen. :)

Niet per vier, vond men; er was immers geen enkel schakelmateriaal (duimwielschakelaars, numitron displays) wat boven de negen kon komen. :)

uhhuh. en wat doen ze dan met 8 en 9 ? 3 bits is 0 tot 7 ...

Precies. De standen 8 en 9 op de duimwielschakelaars zijn loos, maar dat is geen probleem. Je stelt gewoon het gewenste oktale getal in.
En voor het (decimale) display is het natuurlijk geen probleem. Die krijgt gewoon geen 8 of 9 aangeleverd.

Als je als leek een rijtje transpondercodes ziet, valt het ook pas na een tijdje op dat er geen 8 of 9 in zit.

Op 31 augustus 2011 23:05:43 schreef Frederick E. Terman:
Ik denk dat Jovak en ik de enigen hier zijn die nog met oktaal werken, in de adressering van de transponders voor secundaire radar.

Ik denk dat er veel meer zijn, maar dat beseffen ze niet.

Nu werkt bijna iedereen met hexadecimaal, maar op een PDP systeem werkte alles in het octale systeem. Inclusief de datasheets, manuals en ODT. K&R hebben C gemaakt op de PDP, dus dat had wel degelijk zin.
Nu zijn K&R ook de co-designers van UNIX en iedereen die met een unix variant werkt of een website beheerd die hieronder draait kent wel het commando chmod om rechten in te stellen: chmod 777

En dat getal is octaal :)

Dat is grappig, dat wist ik niet. Die '777' is leuk.
Mja, voor de machine zelf maakt het weinig uit, die krijgt gewoon de rij enen en nullen. Het is meer voor onszelf dat we er groepjes in maken.

En dus voor mensen maken we er groepjes van. Groepjes van vier is soms handig, maar in andere gevallen is groepjes van 3 weer handig.

Als je een string bytes hebt, dan is groepjes van 8 handig. Dat delen we dan weer op in groepjes van 2x4, en dan gebruik je hex.

De PDP 11 had een mooie instructieset: er zijn 8 registers. En er zijn 8 adresseringsmodes. Alle instructies zijn dus:
<IETS> <addrmode src> <Rsrc>, <addrmode dst> <Rdst>

3 bits voor het register, 3 bits voor de adresseringsmodes dus totaal 12 bits. 4 bits blijven er over voor de instructie. Nu bleek dat dan weer te weinig te zijn, dus zijn ze instructies gaan maken die dan maar 1 addresseringsmode aankonden voor "src" (en/of dst), zodat er 3 bitjes voor de instructie vrijkomen.

Maar goed. De standaard instructies kan je dus zodra je de adresseringsmodes weet gewoon uit je blote hoofd decoderen als je de opcode in octaal voor je neus hebt.

Op de oude Honeywell Bull computers werd ook veel met octaal gewerkt, dat kwam omdat ze met 7 bits werkten (ipv 8).