Título: Estudiando función que convierte a mayúscula un carácter con operadores de bit Publicado por: kutcher en 30 Junio 2014, 17:46 pm Hi la función en cuestión es esta:
Código
No logro entender esta linea del código: Código
Se que el operador ~ invierte cada bit del 0x20 (i.e 32) convirtiéndolo al numero binario -11111 == -31. Supongamos que *src = 'a' al aplicar el operador & Código
El resultado no es lo esperado que seria el binario 1000001 == 65 alguien podría explicarme que pasa aquí o acaso al usar el operador & sobre binarios negativos tiene otro efecto.. Título: Re: Estudiando función que convierte a mayúscula un carácter con operadores de bit Publicado por: Eternal Idol en 30 Junio 2014, 18:35 pm ~0x20 = 0xDF = -33 = 1101 1111
'a' = 0x61 = 97 = 110 0001 1101 1111 & 0110 0001 --------------- 0100 0001 = 0x41 = 65 = 'A' Título: Re: Estudiando función que convierte a mayúscula un carácter con operadores de bit Publicado por: kutcher en 30 Junio 2014, 19:46 pm @Eternal Idol gracias por tu respuesta, solo una consulta mas porque es necesario invertir los bits de 0x20
Título: Re: Estudiando función que convierte a mayúscula un carácter con operadores de bit Publicado por: Eternal Idol en 30 Junio 2014, 19:54 pm No es necesario en lo absoluto, es una forma de hacerlo, una resta de 0x20=32 a la letra en minuscula tambien daria el resultado esperado.
Mira la tabla ASCII: http://www.asciitable.com/ Título: Re: Estudiando función que convierte a mayúscula un carácter con operadores de bit Publicado por: kutcher en 30 Junio 2014, 20:15 pm No es necesario en lo absoluto, es una forma de hacerlo, una resta de 0x20=32 a la letra en minuscula tambien daria el resultado esperado. Excelente mas claro ni el agua xD, tema resuelto Título: Re: Estudiando función que convierte a mayúscula un carácter con operadores de bit Publicado por: Eternal Idol en 30 Junio 2014, 20:17 pm De nadas ::)
Título: Re: Estudiando función que convierte a mayúscula un carácter con operadores de bit Publicado por: kutcher en 1 Julio 2014, 02:09 am Solo a modo de complemento al tema, quisiera añadir estos puntos de vista:
Analizando mas a fondo el código me he dado cuenta que los carácteres (A-Z) y (a-z ) todos los bits de estos son respectivamente iguales, excepto el sexto bit (contando desde la derecha) a = 1100001 A = 1000001 b = 1100010 B = 1000010 c = 1100011 C = 1000011 d = 1100100 D = 1000100 Como pueden ver las minúsculas tienen el sexto bit a 1 y las mayúsculas a 0 en consecuencia al aplicarle el operador & con la mascara de bit apropiada logramos apagar el sexto bit y dejar los demás intactos obteniendo así su equivalente en mayúscula 1101 1111 <== Mascara de bit & 0110 0001 <== a en binario ------------ 0100 0001 <== A en binario Título: Re: Estudiando función que convierte a mayúscula un carácter con operadores de bit Publicado por: Eternal Idol en 1 Julio 2014, 09:31 am Otra manera mas entonces, si sabemos que 0x20 = 32 = 10 0000 (en negrita el bit necesario), haciendo un XOR sobre el caracter en minuscula obtenemos el caracter en mayuscula:
97 ^ 32 = 65; 0110 0001 ^ 0010 0000 -------------- 0100 0001 http://en.wikipedia.org/wiki/Exclusive_or Si volvemos a aplicar la mascara: 65 ^ 32 = 97; 0100 0001 ^ 0010 0000 -------------- 0110 0001 De esta manera tenes una funcion capaz de cambiar el case (de minuscula a mayuscula y viceversa). Título: Re: Estudiando función que convierte a mayúscula un carácter con operadores de bit Publicado por: kutcher en 1 Julio 2014, 16:59 pm De esta manera tenes una funcion capaz de cambiar el case (de minuscula a mayuscula y viceversa). Wow.. interesante forma de hacerlo por lo versátil que es, ahora mismo lo pruebo a ver que tal |