Foros del Web » Programación para mayores de 30 ;) » .NET »

Operador & y ModBus

Estas en el tema de Operador & y ModBus en el foro de .NET en Foros del Web. Buenas, EStoy trabajando con C# y el "maravilloso" protocolo Modbus. Pues bien tengo una duada con esta operacion, no me da error pero no la ...
  #1 (permalink)  
Antiguo 14/12/2005, 04:26
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Operador & y ModBus

Buenas,

EStoy trabajando con C# y el "maravilloso" protocolo Modbus.

Pues bien tengo una duada con esta operacion, no me da error pero no la acabo de ver bien

//PARA EL MODO DE FUNCIONAMIENTO//
for(electro=0;electro<this.calcular_division(this. electro_contadores);electro++)
{
int filtro=1;
int valor=valors[(this.electro_contadores*3)+1+electro];
for(int i2=0;i2<16&&i2<this.electro_contadores;i2++)
{
if ((valor & filtro)>0)//hago la operacion lógica AND bit a bit
this.lvContadores.Items[(electro*16)+i2].SubItems.Add("Manual");
else

this.lvContadores.Items[(electro*16)+i2].SubItems.Add("Automatico");
filtro=filtro<<1;
}//for
}//for

He estado busacando y el operador para hacer el AND es el '&', entonces al hacer la primera comparación tenemos 0 AND 1 q es 0 ,por lo q modo "Automatico", y luego se incrementa en filtro en 1, por lo q en la segunda y última iteración tenemos 0 AND 2, aqui se supone q sale mas grande q 0 por lo q tb es automático, pero claro de esta forma si valor=0 siempre me sale automatico, y si es valor=1 cuando hago 1 AND 1 es >0 o sea automático, pero lo q no entiendo es pq al hacer 1 AND 2 me sale <0 o sea "automático", y por otra parte, en el registro del modbus referente al modo de funcionamiento valv.(en nuestro caso el 1006)
  #2 (permalink)  
Antiguo 14/12/2005, 13:31
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Cita:
pero lo q no entiendo es pq al hacer 1 AND 2 me sale <0 o sea "automático"
Repasemos un poco de operaciones lógicas:
Código:
01  -> 1
10  -> 2
--
00  -> 1 AND 2
Para lo segundo que preguntas, ni idea.

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #3 (permalink)  
Antiguo 15/12/2005, 01:27
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
xKnow, no se si es lo mismo, pero el operador >> lo q hace es desplazar bits, por lo q filtro=filtro<<1; se supone q si filfro vale 1, en la segunda iteracion q seria 10, en la tercera 0100.... es q no lo veo
  #4 (permalink)  
Antiguo 15/12/2005, 12:52
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Hmm, no sé a que te refieres con tu último mensaje, porque no veo que tenga relación a lo que inicialmente preguntas.

Te respondí a esto:
Cita:
pero lo q no entiendo es pq al hacer 1 AND 2 me sale <0 o sea "automático"
1 AND 2 no es menor que 0, es 0. Es por eso que puse el ejemplo más arriba...

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #5 (permalink)  
Antiguo 16/12/2005, 03:05
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
No te deica q lo q hacemos es si filtro en la 1º iteración es 1, en la segunda q seria 10, en la tercera 1000 y asi....

GRACIAS
  #6 (permalink)  
Antiguo 16/12/2005, 19:08
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Hmm, creo que estamos hablando sobre cosas diferentes...; espero que hayas solucionado tu problema.

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #7 (permalink)  
Antiguo 19/12/2005, 01:12
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Pues si, mas o menos lo tengo solucionado, ahora a por otro problema, ya veras... :(
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:03.