Tienda | Foros | Blogs | EN |
 

consulta sobre c turbo

Seguir
Hola amigos, les cuento..estoy tratando de ayudar a un amigo que rinde mañana viernes, resulta que hay que conetar 2 pcs en red , mediante la norma rs 232, el programa con ayuda de internet y otra gente lo estan haciendo en turbo c.
Yo ya la rendi el año pasado y pasa q hay una pregunta que va siempre y yo me olvide, va..en realidad me obligo a olvidarme la materia es comunicaciones y no me gusta para nada..

El pedazo de codigo donde esta la duda es....

do {
b = inportb(PUERTO + 5); // Tomo un Byte del puerto ... y lo almacena en b

if (b & 1) // Controla si hay un caracter
{
carR = inportb(PUERTO); // Si hay un caracter, lo toma y lo almacena en carR
gotoxy(j,11);
textbackground(BLACK);
textcolor(WHITE);
cprintf("%c",carR); // Imprime el caracter recibido en la pantalla
j++;


la gran pregunta es que hace en "if (b & 1)" como funciona el tema de
& ?? cuando la condicion sera cierta??

Gracias y espero q la ayuda llegue a tiempo! jajaja


3 Soluciones propuestas

Lo que tenés ahí es el operador AND. ¿y eso qué? bueno, lo que haces ahí es hacer una operación AND a nivel de bits al "b" y al "1", los dos bits deben ser 1 para que el resultado sea 1 (verdadero), de otro modo el resultado es 0 (falso).

0 0 = 0
0 1 = 0
1 0 = 0
1 1 = 1
Efectivamente esa es una operacion AND y la funcion de if basicamente es detectar si el bit menos significativo es 1, es decir estas haciendo una operacion AND entre b y 00000001 o sea:

b7 b6 b5 b4 b3 b2 b1 b0
AND
0 0 0 0 0 0 0 1
_____________________
= 0 0 0 0 0 0 0 X

Donde el valor de X depende de la tabla que te dieron arriba (X =0 si b0 = 0 y X=1 si b0 = 1).

Ahora desconozco totalmente para que necesitas esa verificacion, pero segun entiendo por el pedazo de codigo se trata de una bandera que indica que hay un dato que leer.

Saludos.
SOLUCIÓN ACEPTADA
Asi es pikotoro, el lee caractér por caractér y los imprime en pantalla hasta comprobar que se ha llegado al fin del stream de datos.