lama Posted June 29, 2012 Share Posted June 29, 2012 SalutPana acum m-am descurcat cu int si char.Azi am nevoie de un long intsi surpriza nu vrea sa mi-l initializeze log( mi-l face unsigned int)Am citit manualul care zice sa adaug si si nimicLong-ul meu e unsigned int.A mai patit cineva asa ceva? Link to comment
Liviu M Posted June 29, 2012 Share Posted June 29, 2012 Cred ca trebuie sa umbli (in MPLAB) pe la setarile proiectului, sectiunea compiler/linker (nu stiu exact unde sunt si n-am nici un MPLAB la dispozitie) si sa alegi lungimea datelor. Din cate stiu eu, double e implicit pe 24 de biti si probabil nici long-ul nu trece de astia. O alta varianta, daca nu-ti trebuie chiar 32 de biti, e sa folosesti short long (vezi si fisierul ala limits.h): #define SHRTLONG_MAX 8388607 /* max value of short long */#define SHRTLONG_MIN (short long)-8388608 /* min value of a short long */ LE In manualul de la versiunea 9.82 nu exista tipul de data long int. Link to comment
lama Posted June 29, 2012 Author Share Posted June 29, 2012 Greseala era a mea. Era long da il inmultesc cu un intreg si in loc sa il lase long vad ca il face int. Tare faza. S-a rezolvat cu un cast dar incepusem ca cred ca nu stiu ANSI C. Link to comment
Liviu M Posted June 29, 2012 Share Posted June 29, 2012 Rezultatul incape cumva in 16 biti (adica ai inmultit un long mic cu un int mic)? Ca daca da, sunt sanse sa fie un efect al optimizarilor compilerului. Daca nu, n-am idee. Link to comment
lama Posted June 29, 2012 Author Share Posted June 29, 2012 Rezultatul incape cumva in 16 biti (adica ai inmultit un long mic cu un int mic)? Ca daca da, sunt sanse sa fie un efect al optimizarilor compilerului. Daca nu, n-am idee.Mai mult ca sigur ca e optimizatorul.Ajunge el la concluzia ca asa e bine.Noroc cu cast-ul ca il aduce pe calea cea buna. Link to comment
Liviu M Posted June 29, 2012 Share Posted June 29, 2012 Cred ca poti face un test - fa o adunare cu ceva mai mare de unsigned int (65535 parca) si vezi ce zice. Link to comment
lama Posted July 2, 2012 Author Share Posted July 2, 2012 Cred ca poti face un test - fa o adunare cu ceva mai mare de unsigned int (65535 parca) si vezi ce zice.Inmultire de doi unsigned int cu rezultatul pus intr-un long.La final pare ca il duce la unsigned int.In C era functia ctype dar vad ca aici nu e implementat.Deci optimizatorul ..... Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now