Autor Tema: Alternativa a arreglos de 1 bit  (Leído 10448 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Alternativa a arreglos de 1 bit
« Respuesta #15 en: 01 de Febrero de 2007, 13:33:23 »
No sé cuál será el tratamiento que hará CCS de eso, supongo que sí. Pero es fácil comprobarlo.

Lo que sí sé es que cuando haces un int8 = int16 se queda con el byte menos significativo.

Es así porque el estándar ansi así lo especifica.  Una variable mayor dentro de una menor, se asigna por 'truncamiento'.

Lo mismo ocurre en delphi, etc.  De no ser así sería un caos.

Una variable de 1 bit, a la cual se le asigna un byte, de seguro toma el último bit.  Es muy probable que haya un simple BTF del último bit que sería lo más eficiente.


Saludos



- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
Re: Alternativa a arreglos de 1 bit
« Respuesta #16 en: 01 de Febrero de 2007, 22:57:49 »
hola a todos, migsantiago yo uso una estructura, asi si quiero resetear todas las banderas hago en en este caso flag=0; no se cual sea tu caso pero yo encotre esta forma no se si va con tu aplicacion.

Código: [Seleccionar]
   struct {
           int1 mostrar;
           int1 grabar_tarjetas;
           int1 leer_fichado;
           int1 ack;
           int1 reenviar_trama;
           int1 conectar;
           int1 desconectar;
           int1 conectado;
           int1 ajustar_reloj;
           int1 beep;
           int1 sincronizar;
           int1 valid_data;
           int1 send_ack;
           int1 clean_memory;
           int1 trama_ok;
           int1 timer_luz;
           int1 power_ok;
           int1 full_memory;
           } flag;



En otro caso el amigo Sispic uso esto, que tambien es una forma poder direccionar los bits de un byte, usando tambien una estructura, me parece que esto te puede servir mas aun.


Código: [Seleccionar]
typedef struct  {
     int1 b0:1; int1 b1:1; int1 b2:1;  int1 b3:1;  int1 b4:1;  int1 b5:1;  int1 b6:1;  int1 b7:1;
} Los_bits_de_un_Byte;

« Última modificación: 01 de Febrero de 2007, 23:01:29 por pikman »
saludos
PikMan

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Alternativa a arreglos de 1 bit
« Respuesta #17 en: 02 de Febrero de 2007, 08:25:59 »
pikman, la estructura te sirve para el paso final de elegir cual bit dentro del byte es el que deberás seleccionar.  No hay forma de que programáticamente definas el bit a elegir dentro de la estructura.  Osea, en algún momento debes terminar en un IF o CASE. 

De todas formas no te evitas de tener que hacer un 'case' lo cual también se haría lento.  Una rotación a la derecha de un byte es realmente rápida y se hace en 1 ciclo de instrucción.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Alternativa a arreglos de 1 bit
« Respuesta #18 en: 02 de Febrero de 2007, 12:12:35 »
No cabe duda que aquí en el foro hay puro programador experto... yo ni idea tenía de que el arreglo de 1 bit tuviera tantas soluciones  :D

Gracias Pikman

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Alternativa a arreglos de 1 bit
« Respuesta #19 en: 02 de Febrero de 2007, 12:28:10 »
Tilin Tilin...llego tarde?

Fijate que en esta formula que hice recorro un array de char's bit a bit...
En este caso, recorro bit a bit en una matriz que pertenece a R2, es decir: una matriz bidimensional.

http://www.todopic.com.ar/foros/index.php?topic=14805.msg91248#msg91248

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
Re: Alternativa a arreglos de 1 bit
« Respuesta #20 en: 02 de Febrero de 2007, 13:21:44 »
Hola, OK, Maunix, bueno no entiendo bien, no entiendo como es que no puedo elegir el bit dentro de la estructura?, si yo tengo un defino por ejemplo int8  cadena[40]; y quiero saber que hay en el byte 39 seguro voy a tener que hacer un IF o un CASE, o  copiar esa posicion de cadena en una variable temporal para extraerla,  temp=cadena[39]; lo que entiendo que migsantiago quiere hacer saber que bit esta en 1, por lo que si tuviese la posibilidad CCS de hacer lo que el pretender deberia tambien verificar bit por bit, para saber cual esta en 1, lo otro que no entiendo que el pretende 40 bits por lo que la variable deberia ser un int32, en tu ejemplo direcciona al bit 12 de una variable de 8 bits?, bueno creo que se me ha hecho una ensalada, pero me interesa de sobre manera el manejo de bits que siempre es un problema dificil de solucionar, desde ya gracias por tu explicacion.

saludos
PikMan

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Alternativa a arreglos de 1 bit
« Respuesta #21 en: 02 de Febrero de 2007, 13:28:13 »
Pikman, creo que Maunix se refiere a una solución que propuse al principio del hilo, y que viene bien explicada por el propio Maunix algo más tarde.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Alternativa a arreglos de 1 bit
« Respuesta #22 en: 02 de Febrero de 2007, 13:38:23 »
Hola originalmente quería poner a uno o cero cualquier bit de un arreglo de 40 bits. Luego poder leer cualquier bit de ese mismo arreglo.

Hasta ahora Manolo ha propuesto una función para leer el bit de ese arreglo de 40... propongo unas mejoras... aún no probadas

Código: [Seleccionar]
int8 bateria[5]; //40bits
int8 posicion; //no. de bit del arreglo de 40 a leer o escribir
int1 soyunbit; //él es un bit

//para poner a 1 cualquier bit
bit_set(bateria[posicion/8],(posicion%8));

//para poner a 0 cualquier bit
bit_clear(bateria[posicion/8],(posicion%8));

//para leer cualquier bit
soyunbit=bit_test(bateria[posicion/8],(posicion%8));
« Última modificación: 02 de Febrero de 2007, 13:40:50 por migsantiago »


 

anything