2010-11-03 5 views
35

¿Hay alguna manera de utilizar operadores lógicos y de bits, solo operadores aritméticos, para voltear entre enteros con el valor 0 y 1?Puede usar operadores aritméticos para voltear entre 0 y 1

es decir. "variable? = Variable" hará que la variable a 1 si 0 o 0 si es un uno

+0

Tenga en cuenta que en JavaScript, muchas de las respuestas siguientes se evalúan a un valor booleano, no a un número. Por ejemplo: '! X',' (x <= 0) ',' (x == 0) ', etc. –

Respuesta

123
x = 1 - x 

cambiará entre 0 y 1.

+0

Para aplicar esto más ampliamente, si' x' está en un rango específico de números positivos, entonces usted también puede usar esto para invertir su valor (es decir, '7-x' = 0/7, 1/6, 2/5, 3/4). – Pluto

2
int flip(int i){ 
    return 1 - i; 
}; 
16

Suponiendo que se inicia como una 0 o 1:

x = 1 - x 
4

Sólo por un poco de variedad:

x = 1/(x + 1); 

x = (x == 0); 

x = (x != 1); 

No estoy seguro si considera que == y != son operadores aritméticos. Probablemente no, y obviamente, aunque funcionan en C, los idiomas con más caracteres no convertirían el resultado en entero.

20

Editar: leí mal la pregunta, pensaron que el OP podría utilizar any operador

un poco más ... (ignorar estos)

x ^= 1  // bitwise operator 
x = !x  // logical operator 
x = (x <= 0) // kinda the same as x != 1 

Sin utilizar un operador?

int arr[] = {1,0} 
x = arr[x] 
+0

^es un operador bit a bit y! es un operador lógico – MAK

+2

+1 para el segundo método –

+0

@MAK, leí mal la pregunta :('edited' – st0le

12

embargo, otra forma: la variación

x = (x + 1) % 2 
+3

+1 porque esto siempre le dará 0 o 1, incluso si da accidentalmente un número entero fuera de ese rango. –

+0

@NickForge Cosidering esa entrada otra que 1 o 0 es ilegal en el alcance de esta pregunta, ¿está seguro de que es bueno que no proteste al respecto? – Alex

+1

@Alex si eso es bueno o no depende del lenguaje y las expectativas de "actitud defensiva". C por ejemplo, los booleanos se almacenan como enteros con más de 1 bit, por lo que el concepto de "ilegal" es algo confuso. –

3

Comedia en segundo método

x = "\1"[x] 
+0

heh, me encantan las soluciones no obvias. – Hamish

+1

Y si te gusta, te encantará 'x = x [" \ 1 "];' (C y C++). –

1

de st0le puede simplemente probar este

+(!0) // output:1 

+(!1) // output:0 
2

Otra manera de dar la vuelta un poco.

x = ABS(x - 1) // the absolute of (x - 1) 
Cuestiones relacionadas