06/01/2016, 06:25 PM (Última modificación: 06/01/2016, 06:26 PM por GokuX.)
(06/01/2016, 06:23 PM)kikizon2 escribió: Si ya las probaste no veo motivo para crear el thread...
No iniciare la discusión, pero por si tienes problemas de vista, estoy preguntando cual es la manera correcta, ya que así, por lo que veo, no es con las condiciones donde puse los signos "??".
Party Time! , Saludos. (ZP Assassin)100% | 72% (Optimizando)
06/01/2016, 06:52 PM (Última modificación: 06/01/2016, 06:57 PM por I'mBuggimen.)
Código PHP:
new flags = get_user_flags(id)
if(flags & ADMIN_KICK|ADMIN_USER) // Admin Kick o Admin User if(flags & ADMIN_KICK && ~flags & ADMIN_USER ) // es adm kick y no es adm user if(flags & ADMIN_KICK|ADMIN_USER) // es kick o user
06/01/2016, 07:14 PM (Última modificación: 06/01/2016, 07:14 PM por GokuX.)
(06/01/2016, 06:52 PM)ImBuggimen escribió:
Código PHP:
new flags = get_user_flags(id)
if(flags & ADMIN_KICK|ADMIN_USER) // Admin Kick o Admin User if(flags & ADMIN_KICK && ~flags & ADMIN_USER ) // es adm kick y no es adm user if(flags & ADMIN_KICK|ADMIN_USER) // es kick o user
me lo imaginaba, crei que habia una forma de hacerlo sin colocar "flags" otra vez, bueeee gracias
Party Time! , Saludos. (ZP Assassin)100% | 72% (Optimizando)
(06/01/2016, 06:09 PM)GokuX escribió: Hola buenas, primero, si esta es la sección equivocada me disculpan, que me dice que mi cuenta no tiene suficiente "permiso".
Bueeee, vamos al grano.
Tengo una duda respecto a una condicion con bitsum, pasar de esto:
if(flags & ADMIN_KICK|ADMIN_USER) // Admin Kick o Admin User if(flags & ADMIN_KICK&ADMIN_USER) // ?? if(flags & ADMIN_KICK&~ADMIN_USER) // ??
// No se si estan bien las ultimas 2
Bueno, en primer lugar, tienes que usar paréntesis, porque si no los pones, las operaciones se tomarán de izquierda a derecha.
Asumo que quisiste esto:
La primera condición la pasaste mal. En la original, dará TRUE sólo si el usuario tiene ambos flags; pero en la condición que hiciste, bastará que el usuario tenga uno de los dos accesos.
Prueba:
Código PHP:
#define ADMIN_KICK (1<<2) /* flag "c" */ #define ADMIN_USER (1<<25) /* flag "z" */ ADMIN_KICK|ADMIN_USER = (1<<2)|(1<<25)
Si es ADMIN_KICK:
00000000000000000000000000000100 & 00000010000000000000000000000100
0000000000000000000000000000100 = 4 = TRUE
Si es ADMIN_USER:
00000010000000000000000000000000 & 00000010000000000000000000000100
0000001000000000000000000000000 = 2^25 = 33554432 = TRUE
La segunda condición está mal también, porque ADMIN_KICK&ADMIN_USER es 0, y la operación & entre cualquier entero y 0 es 0, por lo tanto será falso siempre.
La tercera condición también está mal. La original dará TRUE si el usuario tiene el flag ADMIN_KICK o ADMIN_USER, pero en la condición que pusiste sólo dará TRUE si el usuario tiene ADMIN_KICK, porque ADMIN_KICK&~ADMIN_USER = ADMIN_KICK.
Te sugiero que revises el tutorial Bitsums; y mientras no tengas mucha experiencia con los bits, tengas un papel a la mano para hacer las operaciones binarias mientras codeas.
Saludos
(06/01/2016, 06:17 PM)kikizon2 escribió: Nunca has escuchado que uno aprende a base de prueba y error ?)
Edit: Si tienes la cuenta limitada es porque tienes %% de advertencia y no tienes derecho a crear threads
06/01/2016, 07:39 PM (Última modificación: 06/01/2016, 07:40 PM por GokuX.)
(06/01/2016, 07:23 PM)Mario AR. escribió:
(06/01/2016, 06:09 PM)GokuX escribió: Hola buenas, primero, si esta es la sección equivocada me disculpan, que me dice que mi cuenta no tiene suficiente "permiso".
Bueeee, vamos al grano.
Tengo una duda respecto a una condicion con bitsum, pasar de esto:
if(flags & ADMIN_KICK|ADMIN_USER) // Admin Kick o Admin User if(flags & ADMIN_KICK&ADMIN_USER) // ?? if(flags & ADMIN_KICK&~ADMIN_USER) // ??
// No se si estan bien las ultimas 2
Bueno, en primer lugar, tienes que usar paréntesis, porque si no los pones, las operaciones se tomarán de izquierda a derecha.
Asumo que quisiste esto:
La primera condición la pasaste mal. En la original, dará TRUE sólo si el usuario tiene ambos flags; pero en la condición que hiciste, bastará que el usuario tenga uno de los dos accesos.
Prueba:
Código PHP:
#define ADMIN_KICK (1<<2) /* flag "c" */ #define ADMIN_USER (1<<25) /* flag "z" */ ADMIN_KICK|ADMIN_USER = (1<<2)|(1<<25)
Si es ADMIN_KICK:
00000000000000000000000000000100 & 00000010000000000000000000000100
0000000000000000000000000000100 = 4 = TRUE
Si es ADMIN_USER:
00000010000000000000000000000000 & 00000010000000000000000000000100
0000001000000000000000000000000 = 2^25 = 33554432 = TRUE
La segunda condición está mal también, porque ADMIN_KICK&ADMIN_USER es 0, y la operación & entre cualquier entero y 0 es 0, por lo tanto será falso siempre.
La tercera condición también está mal. La original dará TRUE si el usuario tiene el flag ADMIN_KICK o ADMIN_USER, pero en la condición que pusiste sólo dará TRUE si el usuario tiene ADMIN_KICK, porque ADMIN_KICK&~ADMIN_USER = ADMIN_KICK.
Te sugiero que revises el tutorial Bitsums; y mientras no tengas mucha experiencia con los bits, tengas un papel a la mano para hacer las operaciones binarias mientras codeas.
Saludos
(06/01/2016, 06:17 PM)kikizon2 escribió: Nunca has escuchado que uno aprende a base de prueba y error ?)
Edit: Si tienes la cuenta limitada es porque tienes %% de advertencia y no tienes derecho a crear threads
Qué agresiva ._.
Ahhh bueee, lo que pasa es que las anote al revéz, lo que queria hacer en bits lo anote al revéz xDDD