Dom 18 Agosto, 07:19:07 - 2019

Autore Topic: esercizio 3 lezione 3 marzo  (Letto 694 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline lizard

  • Studente
  • *
  • Post: 41
  • FeedBack: +8/-0
    • Mostra profilo
esercizio 3 lezione 3 marzo
« il: Dom 27 Luglio, 12:22:07 - 2014 »
realizzo il mio get_bit_array ma:
al momento della compialzione da  "warning: large integer implicitly truncated to unsigned  type"
al momento dell'esecuzione stampa  0000000000000000000000000000000011101011101101011110001011001011

i primi 32 tutti 0 e gli altri corretti come da soluzione

Codice: [Seleziona]
char* get_bit_array(unsigned long x){
char*a;
a=malloc(64*sizeof(char));
int i;
  for(i=0;i<64;i++){
    if(x&1)a[i]=1;
    else a[i] = 0;
    x=x>>1;
  }
return a;
}

Offline xian89

  • Studente
  • *
  • Post: 46
  • FeedBack: +3/-1
    • Mostra profilo
Re:esercizio 3 lezione 3 marzo
« Risposta #1 il: Mer 03 Settembre, 18:30:02 - 2014 »
Io ho fatto cosi:

#include <stdio.h>
#include <stdlib.h>

char* get_bit_array(unsigned long x){
    char* v = malloc(64*sizeof(char));
    unsigned long t = 1;
    int i;
    for(i=0; i<64; i++){
        unsigned long r = x&t;
        if(r==t) v = 1;
        else v = 0;
        t = t<<1;
    }
    return v;
}

int main() {
    int i;
    unsigned long x = 5234971543233487563;
    char* v = get_bit_array(x);
    for (i=63; i>=0; i--) printf("%d", v);
    printf("\n");
    free(v);
    return 0;
}

Offline Strauss

  • Studente
  • *
  • Post: 6
  • FeedBack: +0/-0
    • Mostra profilo
Re:esercizio 3 lezione 3 marzo
« Risposta #2 il: Gio 23 Luglio, 09:26:43 - 2015 »
Non vorrei sbagliare, ma controlla la grandezza dei tipi. Il numero è a 64bit, da come dici sembra che tu invece stia lavorando su una macchina a 32, quindi è normale che ti tronchi tutta la parte superiore dando il risultato corretto per i primi 32bit.