profinet:
Eso lo pensaré más adelante.
para tí son galimatías incomprensibles.
En general
![:xD](https://foro.elhacker.net/Smileys/chef/xd.gif)
0x es el prefijo para indicar que el número debe interpretarse como un valor hexadecimal.
Ya veo:
A = 0x20;
me da 32.
Así que con >> y << las operaciones funcionan más rápido... Nunca me habían dicho. Pero sólo sirven si son *2^algo o /2^algo ¿no?
El símbolo: '&' es el operador booleano AND y '0xFF' es el valor 255 expresado en hexadecimal, básicamene cuando haces un valor and 255, todos los bits por encima del 8º se ponen a cero.
toma la calculadora escribe (en decimal) 123456 (luego pulsa el botón de opción 'bin' para ver el valor en binario, luego devuélvelo a decimal pulsando el botón de opción 'dec') pulsa la tecla AND y luego escribe 255, el resultado será: 64, es decir 0100.0000 dicho de otro modo, hace que el valor esté en el rango 0-255. En definitiva tratándose del valor del canal de un píxel se asegura que el resultado no esté fuera de rango.
Esto me cuesta entenderlo ¿tiene sentido que le llaman AND? Bue, le llaman % al resto, no debería sorprender. El diccionario de Flash dice:
& (operador AND como bit)
Sintaxis
expresión1 & expresión2
Argumentos
expresión1, expresión2 Cualquier número.
Descripción
Operador (como bit); convierte expresión1 y expresión2 en números enteros de 32 bits sin signo y realiza una operación Booleana AND en cada bit de los argumentos del número entero. El resultado es un nuevo número entero de 32 bits sin signo.
Reproductor
Flash 5 o posterior. Si se ha utilizado el operador & en Flash 4 para concatenar cadenas. En Flash 5 el operador & es un AND como bit y los operadores add y + concatenan cadenas. Los archivos de Flash 4 que utilizan el operador & se actualizan automáticamente para utilizar add cuando se traen al entorno de autoría de Flash 5. Hice la prueba que me dijiste pero igual no lo entendí.
A = 0 & 1;
da 0.
A = 2 & 34;
da 2.
A = 5 & 678;
da 4.
A = 9 & 1234;
da 0.
GPT:
En Macromedia Flash 5, la línea de código "A = 0 & 1;" realiza una operación de "AND" a nivel de bits entre los números 0 y 1, y el resultado se asigna a la variable A.
En lenguajes de programación como ActionScript, el operador "&" se utiliza para realizar operaciones de bits a nivel de los valores binarios de los números. En este caso, el número 0 se representa como "00000000" y el número 1 como "00000001". Al realizar el operador "&", se compara cada bit en la misma posición en ambos números y se devuelve 1 solo si ambos bits son 1. De lo contrario, se devuelve 0.
En este caso específico, el resultado de la operación es 0, porque no hay ninguna posición en la que ambos números tengan un bit 1. Por lo tanto, la variable A se asignará con el valor 0.Otro:
La expresión "123 & 456" también realiza una operación de "AND" a nivel de bits, pero esta vez entre los números decimales 123 y 456.
Para entender el resultado, primero debemos convertir esos números a su representación binaria:
123 en binario: 1111011
456 en binario: 111001000
Luego, aplicamos el operador "&" a nivel de bits comparando cada posición:
1111011
& 111001000
111001000O sea:
1111011
&
111001000
=
111001000
Significa escribir un nuevo número de modo que, en el lugar donde cada uno tenga un 1 va un 1 y sino un 0, hasta que sea tan largo como el nro más largo. Lo que no entiendo es lo de "convierte expresión1 y expresión2 en números enteros de 32 bits", imagino que si son números pequeños les pone 0s delante ¿y sin son largos sólo toma lo que está delante?
Cuando se dice que el operador "&" convierte las expresiones a números enteros de 32 bits, significa que toma las expresiones y las representa internamente como números enteros de 32 bits antes de realizar la operación "AND" a nivel de bits.
Un número entero de 32 bits es una representación binaria de un número que utiliza 32 posiciones o bits. Cada bit puede tener un valor de 0 o 1. La conversión a 32 bits asegura que las expresiones se traten como números enteros de longitud fija antes de realizar cualquier operación a nivel de bits.
Si las expresiones originales son números más pequeños que 32 bits, se completa el número con ceros a la izquierda para alcanzar los 32 bits. Por ejemplo, si una expresión es el número decimal 5, se representa en binario como "00000000000000000000000000000101" para ocupar 32 bits.
Una vez que ambas expresiones se han convertido a números enteros de 32 bits, el operador "&" realiza la operación "AND" a nivel de bits entre cada par de bits correspondientes en las expresiones. El resultado es un nuevo número entero de 32 bits sin signo.
En resumen, la conversión a 32 bits asegura que las expresiones se traten como números enteros de longitud fija antes de realizar la operación "AND" a nivel de bits. Esto proporciona consistencia en la representación y permite realizar la operación de manera adecuada. Ah, ya veo, son muchos 0s, 32, me confundía con algo como esto:
Si hay 1 número son 2 posibles valores.
2 -> 4
3 -> 8
4 -> 16
5 -> 32
O no sé, tengo mucho lío, cuando busco cheats en juegos la opción 8 bits son 2 dígitos (o sea de 00 a FF), y de 32 son más pero no tantos, ah, puede ser porque eso es hexadecimal...
Entonces por ejemplo 123456 & xFF:
11110001001000000
&
00000000011111111
=
00000000001000000 = 64
¡Ok! Y esto sirve para... "tratándose del valor del canal de un píxel se asegura que el resultado no esté fuera de rango.", entiendo, pero no para qué aumentó los valores o cómo es eso.
Pero en el caso anterior no es así.
1111011
&
111001000
quedaría:
001111011
&
111001000
=
001001000
No entiendo entonces.
Es una función que convierte un número decimal en una string formateado en hexadecimal y lo devuelve en mayúsculas .
Estás más verde de lo que pensaba en el lenguaje del que estás 'enamorado'...
![:silbar:](https://foro.elhacker.net/Smileys/chef/silbar.gif)
Convierte en hexadecimal el valor que contiene el parámetro de tipo numérico llamado 'decimal'.
Ya, pero es que hace mucho que no convierto algo único a String, lo más parecido que he estado haciendo es concatenar números así Dato1+" "+Dato2, y como pensaba acabo de ver que esto:
J = 3;
J = J+"";
Hace que J sea "3", string, por lo que no hay necesidad de usar String(J) parece. Pero eso de J.toString(), no sé si alguna vez lo había visto, sobre cuestiones binarias y similares aún he visto muy poco.
sería equivalente a:
Código:
color = (rojo * 65536) + (verde * 256) + azul
colorPromedio = decimalToHex(color)
Ya ¿pero por qué funciona? A ver si lo puedo entender más simple:
- Supongamos que en vez de 0 a 255 fuese de 0 a 2 y que tenemos los colores 200 y 210.
- El resultado debería ser 100 o 110 dependiendo de cómo se redondeé.
¿Cómo se llega a ese resultado? ¿algo así?
R1 = Floor(200/100) = 2
Restante = 200-100*R1 = 0
G1 = Floor(Restante/10) = 0
B1 = Restante-10*G1 = 0
R2 = Floor(210/100) = 2
Restante = 210-100*R1 = 10
G1 = Floor(Restante/10) = 1
B1 = Restante-10*G2 = 0
NuevoR = Round((R1+R2)/2)
NuevoG = Round((G1+G2)/2)
NuevoB = Round((B1+B2)/2)
NuevoColor = NuevoR+""+NuevoG+NuevoB
Se supone que eso concatena bien, sino lo cambio.
Es mejor que obtener los caracteres como había planeado. Pero explicame el método de GPT o el tuyo con un ejemplo para que yo lo pueda entender, ojalá. Una de las diferencias es que los valores originales son hexadecimales y deben ser convertidos a decimales, supongo, para poder hacer el promedio. Ah, veo que lo hiciste:
azul1 = (color1 and 255)
verde1 = ((color1 \ 256) and 255)
rojo1 = (color1 \ 65536)
Lo que no entiendo es el and 255, y creo que te faltó ponerlo en rojo1 ¿no?
Ese and 255 ¿se puede convertir en una operación normal como hiciste con los >> y << o es más bien algo lógico?
son cosas elementales de programación, te suena a chino, no solo por ser autodidacta (que no es en sí el problema), es debido quizás a ser demasiado cabezón en no haber querido aprender las cosas elementales que además son comunes e indistintas a cualquier lenguaje. El escaso tiempo que ahorraste en no aprender (3-6 mses) lo pierdes ahora (con creces) en detalles insignificantes
No sé, con ese criterio tendría que haber estudiado electrónica y física atómica que es más elemental, yo aprendí lo que me fue necesario (y que me enteré qie era posible), hasta ahora nunca había precisado esto... De hecho quiero entender si se puede hacer "normal" porque yo programo en un lenguaje "normal", ya sabes, la típica discusión de si conviene aprender lenguaje máquina o no, en mi caso no creo porque me cuesta y tengo poca memoria para ciertas cosas...
¿Te parece que pierdo más tiempo por estar unas horas intentando aprender eso, en vez de pasarme horas haciendo ejercicios? Yo quise estudiar Programación hace años pero había cupos limitados y no obtuve suficiente buena calificación (hubo gente que con 1 punto más que yo entró, pero bue), pero luego vi que a un amigo le pedían hacer cálculos de convertir a binario o cosas que me parecían raras o poco útiles... así que perdí interés. Es como en Química y Física, yo quiero hacer cosas, no cálculos. Tampoco quiero hacer las cosas haciendo malabares si se pueden hacer más simple, me refiero a no usar moles y en este caso... bue, me interesó porque dices que funciona más rápido, pero sino lo del desplazamiento no lo usaría.