Condición bitsum
#1
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:
Código PHP:
if(get_user_flags(id) & ADMIN_KICK && get_user_flags(idADMIN_USER)
if(
get_user_flags(id) & ADMIN_KICK && !(get_user_flags(idADMIN_USER))
if(
get_user_flags(id) & ADMIN_KICK || get_user_flags(idADMIN_USER

a esto:
Código PHP:
new flags get_user_flags(id)

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 
Party Time! Lengua Dancing, Saludos. Gran sonrisa
(ZP Assassin) 100% | 72% (Optimizando)
Responder
#2
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
[Imagen: bvpq9q-6.png]

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Responder
#3
(06/01/2016, 06:17 PM)kikizon2 escribió: Nunca has escuchado que uno aprende a base de prueba y error ?)

Ya las probé, de otro modo no estaría aquí Lengua, si vas a responder eso, mejor no respondas Nothingdohere
Party Time! Lengua Dancing, Saludos. Gran sonrisa
(ZP Assassin) 100% | 72% (Optimizando)
Responder
#4
Si ya las probaste no veo motivo para crear el thread... Nothingdohere
[Imagen: bvpq9q-6.png]

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Responder
#5
(06/01/2016, 06:23 PM)kikizon2 escribió: Si ya las probaste no veo motivo para crear el thread... Nothingdohere

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! Lengua Dancing, Saludos. Gran sonrisa
(ZP Assassin) 100% | 72% (Optimizando)
Responder
#6
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 
~Digito ergo sum~
Responder
#7
(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 Proud
Party Time! Lengua Dancing, Saludos. Gran sonrisa
(ZP Assassin) 100% | 72% (Optimizando)
Responder
#8
(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:
Código PHP:
if(get_user_flags(id) & ADMIN_KICK && get_user_flags(idADMIN_USER)
if(
get_user_flags(id) & ADMIN_KICK && !(get_user_flags(idADMIN_USER))
if(
get_user_flags(id) & ADMIN_KICK || get_user_flags(idADMIN_USER

a esto:
Código PHP:
new flags get_user_flags(id)

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:
Código PHP:
if(flags & (ADMIN_KICK|ADMIN_USER))
if(
flags & (ADMIN_KICK&ADMIN_USER))
if(
flags & (ADMIN_KICK&~ADMIN_USER)) 

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
00000000000000000000000000000100 |
00000010000000000000000000000000
00000010000000000000000000000100

Código PHP:
get_user_flags(id) = ADMIN_KICK o ADMIN_USER 
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.

Prueba:
Código PHP:
ADMIN_KICK = (1<<2) , ADMIN_USER = (1<<25
00000000000000000000000000000100 &
00000010000000000000000000000000
00000000000000000000000000000000 = 0 = FALSE
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.

Prueba:
Código PHP:
ADMIN_KICK = (1<<2) , ADMIN_USER = (1<<25)
// (1<<0)|(1<<1)|(1<<2)....|(1<<31) = -1 (todos los bits en 1)
~ADMIN_USER = -& ~(1<<25
00000000000000000000000000000100 &
11111101111111111111111111111111
00000000000000000000000000000100 = (1<<2) = 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 Mariodance

(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 ._.

Mario
Responder
#9
(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:
Código PHP:
if(get_user_flags(id) & ADMIN_KICK && get_user_flags(idADMIN_USER)
if(
get_user_flags(id) & ADMIN_KICK && !(get_user_flags(idADMIN_USER))
if(
get_user_flags(id) & ADMIN_KICK || get_user_flags(idADMIN_USER

a esto:
Código PHP:
new flags get_user_flags(id)

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:
Código PHP:
if(flags & (ADMIN_KICK|ADMIN_USER))
if(
flags & (ADMIN_KICK&ADMIN_USER))
if(
flags & (ADMIN_KICK&~ADMIN_USER)) 

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
00000000000000000000000000000100 |
00000010000000000000000000000000
00000010000000000000000000000100

Código PHP:
get_user_flags(id) = ADMIN_KICK o ADMIN_USER 
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.

Prueba:
Código PHP:
ADMIN_KICK = (1<<2) , ADMIN_USER = (1<<25
00000000000000000000000000000100 &
00000010000000000000000000000000
00000000000000000000000000000000 = 0 = FALSE
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.

Prueba:
Código PHP:
ADMIN_KICK = (1<<2) , ADMIN_USER = (1<<25)
// (1<<0)|(1<<1)|(1<<2)....|(1<<31) = -1 (todos los bits en 1)
~ADMIN_USER = -& ~(1<<25
00000000000000000000000000000100 &
11111101111111111111111111111111
00000000000000000000000000000100 = (1<<2) = 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 Mariodance

(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 ._.

Mario

Ahhh bueee, lo que pasa es que las anote al revéz, lo que queria hacer en bits lo anote al revéz xDDD

Código PHP:
if(get_user_flags(id) & ADMIN_KICK || get_user_flags(idADMIN_USER)
if(
get_user_flags(id) & ADMIN_KICK && get_user_flags(idADMIN_USER)
if(
get_user_flags(id) & ADMIN_KICK && !(get_user_flags(idADMIN_USER)) 

a esto:
Código PHP:
new flags get_user_flags(id)

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 

asi debió ser jajaja. Me quedo claro, muchas gracias Lengua
Party Time! Lengua Dancing, Saludos. Gran sonrisa
(ZP Assassin) 100% | 72% (Optimizando)
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)