[08:58] <lordievader> Goede morgen.
[12:26] <TopGear> Iemand hier met wat verstand van C? Ik zit met een vraag waar ik maar niet uit kan komen.
[12:29] <Fermata> Laat ens hore .
[12:29] <Fermata> eens horen*
[12:32] <TopGear> Ik ben een programma aan het maken wat uitvogelt of een input een priemgetal is. Ik probeer dit in een int te houden, dus ik heb de maximale en minimale waarden van int gedefinieerd met min en max. Echter werkt dat niet helemaal en komen er hele rare antwoorden uit. Dit is de code: if(num < min || num > max){ etc. num is de input van de gebruiker.
[12:33] <lotuspsychje> de jonges van ##programming kunnen mss ook wel helpen
[12:35] <Sling> TopGear: kun je de code in een pastebin laten zien?
[12:35] <TopGear> Sure
[12:36] <TopGear> Sling: http://pastebin.com/ZpLnPPX9
[12:38] <Sling> TopGear: je maakt een paar denkfoutjes zie ik
[12:38] <TopGear> Dat kan, ik ben nog maar net begonnen met C eigenlijk. Waar zitten deze?
[12:38] <Sling> ten eerste is een int 16-bit, dus -32767 tot 32767
[12:38] <Sling> voor die max/min die jij hebt heb je een 32-bit variabele nodig, dus een 'long'
[12:39] <Sling> en in dit geval is een unsigned long int waarschijnlijk het meest geschikte
[12:39] <Fermata> Ten tweede, maar dat is een detail, dient je functie main een int terug te geven.  Dat doe je, maar in je functiesignatuur staat het niet.
[12:40] <Sling> maar het belangrijkste hier is je declareert een type variabele, de scanf() functie vult die waarde
[12:40] <Sling> *daarna* check jij of de waarde binnen bounds is, maar dat is eigenlijk te laat
[12:40] <Sling> want op dat moment is de variabele al gevuld
[12:41] <Sling> dus checken of de variabele NULL is of 0 zou voldoende moeten zijn
[12:41] <Sling> als het niet een van die twee is, dan is het dus een geldige int / long
[12:42] <TopGear> Oké, hartelijk dank! Ik ga er weer verder mee aan de slag.
[12:43] <TopGear> In ieder geval werkt hij nu weer zoals hij "hoort": alles buiten -32767 en 32767 wordt genegeerd.
[12:43] <Sling> en die for loop maar doorlopen tot num/2 is denk ik niet goed, ik denk dat je alles t/m num moet testen
[12:43] <Fermata> Maar Sling, volgens de gcc documentatie is een int standaard 32 bit lang, tenzij anders geecifieerd in de argumenten
[12:44] <Sling> oh nee, /2 is wel goed
[12:45] <Sling> Fermata: hmm volgens mij zeggen de specs dat het minstens 16 bit moet zijn
[12:45] <Sling> niet dat het altijd 32-bit is
[12:45] <Sling> magoed, details
[12:45] <Fermata> http://crasseux.com/books/ctutorial/Integer-variables.html
[12:45] <Sling> in dit geval lijkt me signed vs unsigned een nuttigere kwestie qua datatype kiezen :)
[12:46] <Fermata> Ja, negatieve getallen zijn natuurlijk ook niet priem.
[12:46]  * TopGear slaat zich voor z'n hoofd.
[12:47] <TopGear> De Pfeiffer heeft er nogal ingehakt, blijkt wel. Wat een fout zeg...
[12:49] <Fermata> Menselijke fouten toch.
[12:49] <Sling> brr C specs lezen is ook niet leuk
[12:56] <Fermata> 32 bit wordt vooral als standaard beschouwd omdat er anders geen ruimte meer zit tussen char en short.
[12:56] <Fermata> 8, 16, 32.
[13:00] <Sling> int is natuurlijk wel impliciet ook een signed int, dus kun je er maximaal een 16-bit positieve integer in kwijt als het hele ding 32-bit breed is
[13:00] <Sling> maar misschien is het 16-bit in C89 oid
[13:00] <Sling> ah, "This is one of the points in C that can be confusing at first, but the C standard only specifies a minimum range for integer types that is guaranteed to be supported. int is guaranteed to be able to hold -32767 to 32767, which requires 16 bits. In that case, int, is 2 bytes. However, implementations are free to go beyond that minimum, as you will see that many modern compilers make int 32-bit (which also means 4 bytes pretty ubiquitously)."
[13:01] <Sling> TIL
[13:01] <Fermata> Jep.
[13:01] <Fermata> Ook door die scheiding tussen char, short en int die ik neomde.
[13:21] <TopGear> 0 tot 2147483647 past trouwens mooi in 'n int. Grappig om te zien dat als je 2147483648 intypt, er hele rare getallen uit komen.
[13:23] <Fermata> negatieve?
[13:26] <TopGear> Jup
[13:26] <TopGear> Enter an integer between and including 0 and 2147483647: 2147483648 [enter] -2147483648 is a prime number.
[13:31] <Fermata> Kijk eens naar hoe op binair niveau signing werkt.
[13:31] <Fermata> Dan wordt het heel gauw duidelijk.
[13:36] <Sling> iets met een 0 en een 1 :)
[13:36] <Sling> en dan vooraan of achteraan, afhankelijk van endianness
[13:39] <jpjacobs> 2-complement
[13:39] <jpjacobs> ;)
[13:44] <Fermata> Jeuj, medeprogrammeurs.
[13:54] <jpjacobs> *high five*
[20:02] <arieubuntu> avond
[20:10] <Fermata> Avond.
[20:12] <arieubuntu> iemand die ook amule gebruikt?
[20:15] <Fermata> Ik niet.
[20:16] <arieubuntu> ok