Συντονιστής: konnn
#include <stdlib.h>
#include <stdio.h>
void printbit( long long int );
int main()
{
long long int CRC = 0x104C11DB7;
//printf( "%x", CRC );
printbit( CRC );
printf( "\n" );
system( "pause" );
return 0;
}
void printbit( long long int x )
{
int bit;
for ( bit = 1; bit <= 8 * sizeof( long long int ); bit++ )
{
if( x & 0x80000000 )
{
printf( "1" );
x <<= 1;
}
else
{
printf( "0" );
x <<= 1;
}
if( bit % 8 == 0)
printf( " " );
}
}
gyros έγραψε:Να χαιρετήσω καταρχάς την Ubuntu κοινότητα. Είμαι νέο μέλος ( μόλις γράφτηκα ). Θέλω να ρωτήσω κάτι και ελπίζω να είναι το σωστό topic, αν δεν είναι παρακαλώ τους admin να το μεταφέρουν.
Λοιπών έχουμε και λέμε. Έχω ένα 32-bit σύστημα intel pentium 4, 3.0 GHz και έχω και το Ubuntu 8.10. Τώρα που σας γράφω βέβαια είμαι στα windows
Στα ψητό. Θέλω να γράψω ένα πρόγραμμα σε C και χρειάζομαι μια μεταβλητή τύπου long long int. την ορίζω αλλά δεν μου την αναγνωρίζει και μου κάνει από μόνο του cast σε long int και δεν ξέρω τι φταίει. Το compile το κάνω με gcc. Μήπως χρειάζεται καμιά έξτρα βιβλιοθήκη να κάνω include??????
gyros έγραψε:Και όμως εδώ είναι το παράξενο. Το κοίταξα αυτό το θέμα και το sizeof( int ) και το sizeof( long int ) είναι ίδιο, 4-byte. Το sizeof( long long int ) μου βγάζει 8-byte.
Αλλά παρόλα αυτά μου το κάνει cast σε long int. Και έτσι σκέφτομαι μήπως πρέπει να κάνω include κάποια συγκεκριμένη βιβλιοθήκη. Βέβαια πριν ποστάρω έκανα και ένα googlάρσμα, αλλά δεν βρήκα και τίποτα. Μόνο από κάτι κομμάτια κώδικα που είδα δεν έκανε κανείς καμιά ιδιαίτερη βιβλιοθήκη include. Και για αυτό πήρα την απόφαση να κάνω ποστ.
Λέτε να μου λείπει καμιά βιβλιοθήκη από τον GCC???? Αν και σκέφτομαι και τον ενδεχόμενο μήπως παίζει ρόλο και το μηχάνημα, για αυτό έβαλα και το μοντέλο του επεξεργαστή.
gyros έγραψε:Προσπάθησα να βάλω στο αρχικό ποστ μια φωτογραφία από τον φλοιό από την μεταγλώττιση και την εκτέλεση του κώδικα που έδωσα. Το λάθος γίνεται με την δήλωση της μεταβλητής CRC. Την δηλώνω long long int και ο compiler μου την καταχωρεί ως να είναι απλά long int και έτσι χάνεται κάποια πληροφορία. Αυτό που προσπαθώ να κάνω είναι να μπορέσω να φτιάξω μια συνάρτηση για να εκτυπώνει στην οθόνη έναν ακέραιο ή δεκαεξαδικό στην οθόνη σε δυαδική μορφή και χωρισμένη σε 8άδες bit. Η συνάρτηση δουλεύει ή για να είμαστε και ακριβείς φαίνεται να δουλεύει. Το θέμα είναι ότι για την δουλειά που το θέλω εγώ θέλω να χρησιμοποιήσω ακέραιους πάνω από 4-byte, το long long int προσφέρει 8. Και το θέμα είναι ότι τον δεκαεξαδικό που αρχικοποιώ στην CRC θέλει 5 -bytes. Και ενώ θεωρητικά θα έπρεπε να αποθηκευτεί ολόκληρος, αποθηκεύονται μόνο τα πρώτα 4 byte του δεκαεξαδικού. ως να ήταν απλώς long int η μεταβλητή CRC. Ελπίζω να έγινα κατατοπιστικότερος.