|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jul 2008
Messaggi: 81
|
[C] dubbio unsigned int
perchè anche se uso unsigned int o unsigned long int il numero massimo che posso memorizzare rimane 2,147,483,647?? che devo usare per arrivare a 4,294,967,295??
|
|
|
|
|
|
#2 |
|
Member
Iscritto dal: May 2009
Messaggi: 186
|
Come fai a saperlo, lo vedi dal debugger o lo stampi? Nel secondo caso posta il codice.
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
|
Nel caso utilizzassi il più diffuso compilatore in circolazione (gcc) leggi qui: http://gcc.gnu.org/onlinedocs/gcc-4....implementation
__________________
AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200 |
|
|
|
|
|
#4 | |
|
Member
Iscritto dal: Jul 2008
Messaggi: 81
|
Quote:
Codice:
#include <stdio.h>
#include <stdint.h>
int main () {
unsigned int a;
unsigned long int b;
uint32_t c;
a=2147483647;
printf ("unsigned int: %d\n",a);
b=2147483647;
printf ("unsigned long int: %d\n",b);
c=2147483647;
printf ("uint32_t: %d\n",c);
return 0;
}
ma se incremento anche di una sola unità assegnando 2147483648 mi stampa -2147483648. |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: May 2009
Messaggi: 186
|
Probabilmente stai solo sbagliando a visualizzare. Prova come ho evidenziato (%u anzichè %d che è per i signed). Per sicurezza metti un break e verifica con il debugger il valore effettivo di a.
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Mareno di Piave (TV)
Messaggi: 962
|
Quoto ESSE-EFFE: anche per me è un "problema" di printf che interpreta i 4 bytes come numero decimale ("%d") e non come unsigned decimale ("%u")
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jul 2008
Messaggi: 81
|
si era proprio questo il problema..mamma mia che cavolata!
adesso passiamo allo step successivo: voglio creare un array di unsigned int di dimensione massima, quindi 4294967295, però ho dei problemi con la malloc: Codice:
#include <stdio.h>
#include <stdint.h>
int main () {
unsigned int *a;
unsigned int n;
n = 4294967295;
a = (unsigned int *)malloc(n*sizeof(unsigned int));
if (a==NULL) printf("Allocazione non riuscita!");
else printf ("Allocazione riuscita!");
return 0;
}
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: May 2009
Messaggi: 186
|
E lo credo, stai allocando più di 16GB di memoria... magari spiega meglio cosa stai cercando di fare, forse qualcuno potrà esserti d'aiuto...
|
|
|
|
|
|
#9 | |
|
Member
Iscritto dal: Jul 2008
Messaggi: 81
|
Quote:
stò studiando alcuni algoritmi di ordinamento e volevo fare dei test con degli array molto grandi..pensavo appunto a qualche miliardo di elementi. non c'è proprio modo vero? |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 343
|
Se vuoi fare delle prove con algoritmi di ordinamento non è necessario usare degli array così grandi. Avevo fatto già delle prove qualche annetto fa, e per mandare in crisi un algoritmo di ordinamento di complessità lineare (bubble sort e compagnia per intenderci) bastavano array di qualche decina di migliaia di elementi. Per gli algoritmi più veloci, qualche decina di milioni di elementi erano già sufficienti.
__________________
Portatile Asus ROG Strix GL502VSK - Core i7-7700HQ @ 2.8GHz (Turbo 3.8GHz) - 16Gb RAM DDR4-2400 (2x8Gb) - Nvidia GeForce GTX 1070 8Gb - Schermo 120Hz G-SYNC - SSD Samsung 960 PRO NVMe 512Gb - HDD 7200RPM 1Tb "Defeat is not the worst of failures. Not to have tried is the true failure." |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:01.




















