Pregunta

Se trata de un problema de matemáticas, pero estoy seguro de que esto debe llegar en algunos escenarios de programación, al menos eso espero, y me preguntaba si había un nombre para este tipo de situaciones:

Supongamos que tengo 7 artículos en serie. Por el bien de este ejemplo, vamos a utilizar los días de la semana. Me gustaría que un usuario envíe qué días de la semana que planean venir en la semana siguiente. Se presentan con una serie de casillas de verificación estándar, uno para cada día de la semana.

Me gustaría registrar cuales días que elijan en un campo de base de datos como un solo número entero.

Obviamente, podría asignar a cada día un número, 1 - 7 (dejando a 0 en caso de que el usuario deja todas las opciones sin marcar). Pero entonces me encuentro con problemas si un usuario elige lunes y martes (1 + 2) y el otro elige miércoles (3).

También podría dar a cada día de la semana alguna extraña única de tal manera que era imposible para cualquier combinación de dígitos a ser idéntica a cualquier otra combinación.

Mi esperanza es que en lugar de hacer una serie como para el segundo escenario, alguna propiedad numérica ya existe (tal vez el cuadrado de cada número de la serie, etc.) que ya está bien utilizado y respetado. Idealmente, esto sería tan familiarizados con la programación, que se derivan de los dígitos individuales tomaría muy poca sobrecarga de un lenguaje de programación común (en mi caso PHP).

Qué acabo de sueño con esto, o qué existe algo como esto?

¿Fue útil?

Solución

Utilice una máscara de bits -. Potencias de 2

Monday = 2 ^ 0 = 1
Tuesday = 2 ^ 1 = 2

y así sucesivamente. A continuación, lunes y martes se convierte en:

Monday | Tuesday = 3 (or 00000011 in binary)

Otros consejos

Se puede usar

Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
Saturday = 32
Sunday = 64

Las combinaciones serán únicos.

A continuación, lunes y martes = 3, y el miércoles = 4.

Esto da una buena explicación de la idee en C #

Enum Banderas atributo

En los días cuando la memoria era preciosa, los programadores a menudo fueron a un montón de problemas para codificar los ajustes, parámetros disposiciones del juego, y así sucesivamente como conjuntos de bits. Algunos lenguajes incluso tenían conjuntos de bits incorporados en ellos.

Recuerdo que una vez leer un tutorial sobre conjuntos de bits que ellos utilizan para almacenar los diseños de tablero para resolver el problema de las ocho reinas.

La mayoría de los programadores de C tenían su propia pequeña biblioteca de macros de manipulación de bits por sólo este tipo de problemas. Ver pone el bit por ejemplo. Todavía se utilizan mucho en código que hace la manipulación directa del hardware -. Girando bits de encendido y apagado de E / S digital, por ejemplo,

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top