Re: [GLO] GCC constantes binarias

2009-11-01 Por tema Andres Tello
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

2009-11-01 Por tema Andres Tello

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

2009-11-01 Por tema Joel Rodriguez

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.