He estado tratando de resolver este problema por un tiempo, pero no pude con números enteros aritméticos y operadores bit a bit. Sin embargo, creo que es posible y debería ser bastante fácil. ¿Qué me estoy perdiendo?¿La forma más rápida de calcular una máscara de bits X-bit?
El problema: para obtener un valor entero de longitud arbitraria (esto no es relevante para el problema) con su X bits menos significativos sets a 1 y el resto a 0. Por ejemplo, dado el número 31, I necesita obtener un valor entero que sea igual a 0x7FFFFFFF (31 bits menos significativos son 1 y el resto ceros).
Por supuesto, utilizando un bucle OR-ing un desplazado 1 a un número entero X veces hará el trabajo. Pero esa no es la solución que estoy buscando. Debería ser más en la dirección de (X << Y - 1)
, sin usar bucles.
No debería, siempre y cuando arroje 1 primero (no sé C#, así que no sé cómo). Luego se evaluará a 0 - 1, es decir, 32 1 en una máquina de 32 bits. – doublep
Usted tiene la solución que estaba buscando. Directo y simple, sin ningún bucle. Y cuando X es igual a la longitud del bit del entero, todos los bits se convierten en 1 como se esperaba. Incluso funciona para la esquina donde X = 0. Gracias. – Virtlink