Re: [GLO] GCC constantes binarias
Use the hex... Usa la notacion hexadecimal, menos propensa a interpretaciones extrañas... unsigned in myconstante; myconstante=0xFF; y listo... On Saturday 31 October 2009 22:34:23 Miguel Cardenas wrote: Hola A proposito del encoder para base64, al probarlo me encontre con algo raro, resulta que necesito hacer algunas operaciones a nivel bit pero no me funcionan las constantes binarias... Si especifico algo como 01010 me lo toma como numero OCTAL, segun San Google debo usar la notacion 0b1010 o 0B1010 para el GCC pero pura madre no es cierto, al compilar me dice: invalid suffix b1010 on integer constant Mi pregunta es: como jijos del maizal hago para introducir CONSTANTES BINARIAS en GCC? siguiendo todos los articulos que me regresan google es 0b+xx pero no es cierto, al menos en mi GCC 4.2.3 Gracias y saludos
Re: [GLO] GCC constantes binarias
Si quieren optimizar el uso de memoria en el manejo de enteros positivos, esta la codificacion BDC, donde dependiendo del tamaño del registro puedes utilizar 2 nibbles o hasta 4 XD On Sunday 01 November 2009 05:01:28 Joel Rodriguez wrote: Miguel: eso sería 0x0a (hexadecimal) mi impresión es que solo puedes almacenar información, minimamente como 1 byte (char),. o séa 8-bits, 2 hexadecimales. lo siguiente sería como almacenar medio byte: invalid suffix b1010 on integer constant cualquier entero usa minimo 4 bytes en arquitecturas nuevas. haciendo operaciones suponiendo que quieres almacenar valores binarios en 4 bytes (int) generas mascaras de 64 bits int i; unsigned long long int bit[i]; unsigned long long valbit; for(i=0;i64;i++) { unsigint=(unsigned long long int) 1; bit[i]=(unsiginti); /*mascara para cada uno de los 64 bits*/ valbit=0 | bit[i]; /*operacion OR binaria*/ printf(i=%d %lld \n,i,valbit); /* para ver que si, lo está haciendo*/ } para empaquetar los valores binarios, haces como sigue con las mascaras bit[i]: int s[10][64]; /* arreglo de 640 valores binarios muy eficiente ;) */ FILE *condinit; ... for(cuenta=0;cuenta10;cuenta++){ for(kk=0;kk64;kk++) { fscanf(condinit,%f\n,tempfloat); if(tempfloat==1.0) s[cuenta2]=s[cuenta] | bit[kk];/*empaqueta un 1 o deja el cero con OR y mascara*/ } } ... saludos, Joel :) Miguel Cardenas wrote: Hola A proposito del encoder para base64, al probarlo me encontre con algo raro, resulta que necesito hacer algunas operaciones a nivel bit pero no me funcionan las constantes binarias... Si especifico algo como 01010 me lo toma como numero OCTAL, segun San Google debo usar la notacion 0b1010 o 0B1010 para el GCC pero pura madre no es cierto, al compilar me dice: invalid suffix b1010 on integer constant Mi pregunta es: como jijos del maizal hago para introducir CONSTANTES BINARIAS en GCC? siguiendo todos los articulos que me regresan google es 0b+xx pero no es cierto, al menos en mi GCC 4.2.3 Gracias y saludos
Re: [GLO] GCC constantes binarias
De hecho, lo que quiero decir es que no puedes almacenar medio byte. en el sentido de que b1010?,. realmente es 0b1010 1 byte minimo. ¿Quieres decir que no se pueden usar números menor de 255? ;-) Será su versión del GCC o un error en el código: si, si puedes almacenar numeros menores a 255 con int, tan es as'i, que en tu programa utilizas 4 bytes! para eso. (buen 1/2 troll) ;) si, tienes raz'on,. parece que tenemos un problema de compilador ;) j...@movil-joel:~$ cat binario1.c #include stdio.h int main(void) { int i = 0b101010; printf(%d\n, i); return 0; } j...@movil-joel:~$ gcc binario1.c -o binario1 ./binario1 binario1.c:5:12: error: invalid suffix b101010 on integer constant j...@movil-joel:~$ cat binario2.c #include stdio.h int main(void) { int i =0x2a; printf(%d\n, i); return 0; } j...@movil-joel:~$ gcc binario2.c -o binario2 ./binario2 42 j...@movil-joel:~$ gcc -v Reading specs from /usr/lib/gcc/i486-slackware-linux/4.2.3/specs Target: i486-slackware-linux Configured with: ../gcc-4.2.3/configure --prefix=/usr --enable-shared --enable-languages=ada,c,c++,fortran,java,objc --enable-threads=posix --enable-__cxa_atexit --disable-checking --with-gnu-ld --verbose --with-arch=i486 --target=i486-slackware-linux --host=i486-slackware-linux Thread model: posix gcc version 4.2.3 j...@movil-joel:~$ saludos, Joel Thomas Bliesener wrote: Joel Rodriguez escribió el 2009-11-01: mi impresión es que solo puedes almacenar información, minimamente como 1 byte (char),. o séa 8-bits, 2 hexadecimales. lo siguiente sería como almacenar medio byte: invalid suffix b1010 on integer constant ¿Quieres decir que no se pueden usar números menor de 255? ;-) Será su versión del GCC o un error en el código: |b...@bli:~$ cat binario.c |#include stdio.h | |int main(void) |{ | int i = 0b101010; | | printf(%d\n, i); | | return 0; |} | |b...@bli:~$ gcc binario.c -o binario ./binario |42 |b...@bli:~$ gcc --version |gcc (Debian 4.3.2-1.1) 4.3.2 |Copyright (C) 2008 Free Software Foundation, Inc. |This is free software; see the source for copying conditions. There is |NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.