Ich versuche, eine Zufallszahl unter Verwendung aller Bits eines int zu generieren. Wenn ich die rand() -Funktion verwende, scheint es nie das erste Bit zu verwenden, also habe ich versucht, das ganze Ding um einen Platz zu verschieben. Wenn ich jedoch versuche, die neue verschobene Nummer zu drucken, druckt es immer 4294967295, also denke ich, dass das ein Überlauf ist. Warum kann ich dieses Bit nicht benutzen? gibt es einen Weg?Warum kann ich das erste Bit eines Int nicht verwenden?
Wenn das erste Bit wird nicht verwendet, es funktioniert gut, wie diese (Druck vor und nach der Verschiebung der Zufallszahl):
00000100001100111111001010010111
00001000011001111110010100101110
aber wenn das erste Bit benötigt wird, geschieht dies:
01010110100001110011110011011111
42949672950101101000011100111100110111110
bitte helfen !! Es ist technisch Arbeits, druckt es nur zuerst die Zahl ...
typedef struct{
int blocks[NUM_BLOCKS];
} WWord;
void printbits(unsigned int n){
int i;
//printf("%u = ",n);
for(i=SIZE_OF_INT*SIZE_OF_BYTE-1;i>=0;i--){
int mask = 1<<i;
int maskedn = n&mask;
int thebit = maskedn >> i;
printf("%u",thebit);
}
printf("\n");
}
void fillword(WWord *word){
int i;
for(i=0; i<NUM_BLOCKS;i++){
unsigned int ran = rand();
printbits(ran);
ran = ran<<1;
printbits(ran);
word->blocks[i] = ran;
//word->blocks[i]<<1;
printf("\n");
}
}
signiert vs unsigned Ints. In einem vorzeichenbehafteten int ist das High-Bit für das Zeichen reserviert. In einem unsigned int wird das High-Bit nicht für ein Zeichen verwendet. Sie generieren und drucken nicht signierte Ints, aber Ihr Array 'blocks []' speichert signierte Ints. –
Nein, bist du nicht. Der Standardwert für "int" ist signiert. – OldProgrammer
oh, für die MASKE! Duh. Vielen Dank! – cmperezg