php bitcount,PHP: Operadores bit a bit - Manual

Ejemplo #3 Desplazamiento de bits sobre integers

* Aquí están los ejemplos.

*/echo"\n--- DESPLAZAMIENTO DE BITS A LA DERECHA SOBRE ENTEROS POSITIVOS ---\n";$val=4;$places=1;$res=$val>>$places;p($res,$val,'>>',$places,'copia del bit de signo desplazado hacia el lado izquierdo');$val=4;$places=2;$res=$val>>$places;p($res,$val,'>>',$places);$val=4;$places=3;$res=$val>>$places;p($res,$val,'>>',$places,'bits desplazados fuera del lado derecho');$val=4;$places=4;$res=$val>>$places;p($res,$val,'>>',$places,'mismo resultado que arriba; no se puede desplazar más allá del 0');

echo"\n--- DESPLAZAMIENTO DE BITS A LA DERECHA SOBRE ENTEROS NEGATIVOS ---\n";$val= -4;$places=1;$res=$val>>$places;p($res,$val,'>>',$places,'copia del bit de signo desplazado al lado izquierdo');$val= -4;$places=2;$res=$val>>$places;p($res,$val,'>>',$places,'bits desplazados fuera del lado derecho');$val= -4;$places=3;$res=$val>>$places;p($res,$val,'>>',$places,'mismo resultado que arriba; no se puede desplazar más allá del -1');

echo"\n--- DESPLAZAMIENTO DE BITS A LA IZQUIERDA SOBRE ENTEROS POSITIVOS ---\n";$val=4;$places=1;$res=$val<

echo"\n--- DESPLAZAMIENTO DE BITS A LA IZQUIERDA SOBRE ENTEROS NEGATIVOS ---\n";$val= -4;$places=1;$res=$val<

* Ignore this bottom section,

* it is just formatting to make output clearer.

*/functionp($res,$val,$op,$places,$note='') {$format='%0'. (PHP_INT_SIZE*8) ."b\n";printf("Expression: %d = %d %s %d\n",$res,$val,$op,$places);

echo" Decimal:\n";printf("  val=%d\n",$val);printf("  res=%d\n",$res);

echo" Binary:\n";printf('  val='.$format,$val);printf('  res='.$format,$res);

if ($note) {

echo" NOTE:$note\n";

}

echo"\n";

}?>

El resultado del ejemplo en equipos de 32 bit sería:

--- DESPLAZAMIENTO DE BITS A LA DERECHA SOBRE ENTEROS POSITIVOS ---

Expression: 2 = 4 >> 1

Decimal:

val=4

res=2

Binary:

val=00000000000000000000000000000100

res=00000000000000000000000000000010

NOTE: copia del bit de signo desplazado hacia el lado izquierdo

Expression: 1 = 4 >> 2

Decimal:

val=4

res=1

Binary:

val=00000000000000000000000000000100

res=00000000000000000000000000000001

Expression: 0 = 4 >> 3

Decimal:

val=4

res=0

Binary:

val=00000000000000000000000000000100

res=00000000000000000000000000000000

NOTE: bits desplazados fuera del lado derecho

Expression: 0 = 4 >> 4

Decimal:

val=4

res=0

Binary:

val=00000000000000000000000000000100

res=00000000000000000000000000000000

NOTE: mismo resultado que arriba; no se puede desplazar más allá del 0

--- DESPLAZAMIENTO DE BITS A LA DERECHA SOBRE ENTEROS NEGATIVOS ---

Expression: -2 = -4 >> 1

Decimal:

val=-4

res=-2

Binary:

val=11111111111111111111111111111100

res=11111111111111111111111111111110

NOTE: copia del bit de signo desplazado al lado izquierdo

Expression: -1 = -4 >> 2

Decimal:

val=-4

res=-1

Binary:

val=11111111111111111111111111111100

res=11111111111111111111111111111111

NOTE: bits desplazados fuera del lado derecho

Expression: -1 = -4 >> 3

Decimal:

val=-4

res=-1

Binary:

val=11111111111111111111111111111100

res=11111111111111111111111111111111

NOTE: mismo resultado que arriba; no se puede desplazar más allá del -1

--- DESPLAZAMIENTO DE BITS A LA IZQUIERDA SOBRE ENTEROS POSITIVOS ---

Expression: 8 = 4 << 1

Decimal:

val=4

res=8

Binary:

val=00000000000000000000000000000100

res=00000000000000000000000000001000

NOTE: ceros rellenan en el lado derecho

Expression: 1073741824 = 4 << 28

Decimal:

val=4

res=1073741824

Binary:

val=00000000000000000000000000000100

res=01000000000000000000000000000000

Expression: -2147483648 = 4 << 29

Decimal:

val=4

res=-2147483648

Binary:

val=00000000000000000000000000000100

res=10000000000000000000000000000000

NOTE: bit de signo resulta desplazado fuera

Expression: 0 = 4 << 30

Decimal:

val=4

res=0

Binary:

val=00000000000000000000000000000100

res=00000000000000000000000000000000

NOTE: bit de signo desplazado fuera del lado izquierdo

--- DESPLAZAMIENTO DE BITS A LA IZQUIERDA SOBRE ENTEROS NEGATIVOS ---

Expression: -8 = -4 << 1

Decimal:

val=-4

res=-8

Binary:

val=11111111111111111111111111111100

res=11111111111111111111111111111000

NOTE: ceros rellenan en el lado derecho

Expression: -2147483648 = -4 << 29

Decimal:

val=-4

res=-2147483648

Binary:

val=11111111111111111111111111111100

res=10000000000000000000000000000000

Expression: 0 = -4 << 30

Decimal:

val=-4

res=0

Binary:

val=11111111111111111111111111111100

res=00000000000000000000000000000000

NOTE: bits desplazados fuera del lado izquierdo, incluyendo el bit de signo

El resultado del ejemplo en equipos de 64 bit sería:

--- DESPLAZAMIENTO DE BITS A LA DERECHA SOBRE ENTEROS POSITIVOS ---

Expression: 2 = 4 >> 1

Decimal:

val=4

res=2

Binary:

val=0000000000000000000000000000000000000000000000000000000000000100

res=0000000000000000000000000000000000000000000000000000000000000010

NOTE: copia del bit de signo desplazado hacia el lado izquierdo

Expression: 1 = 4 >> 2

Decimal:

val=4

res=1

Binary:

val=0000000000000000000000000000000000000000000000000000000000000100

res=0000000000000000000000000000000000000000000000000000000000000001

Expression: 0 = 4 >> 3

Decimal:

val=4

res=0

Binary:

val=0000000000000000000000000000000000000000000000000000000000000100

res=0000000000000000000000000000000000000000000000000000000000000000

NOTE: bits desplazados fuera del lado derecho

Expression: 0 = 4 >> 4

Decimal:

val=4

res=0

Binary:

val=0000000000000000000000000000000000000000000000000000000000000100

res=0000000000000000000000000000000000000000000000000000000000000000

NOTE: mismo resultado que arriba; no se puede desplazar más allá del 0

--- DESPLAZAMIENTO DE BITS A LA DERECHA SOBRE ENTEROS NEGATIVOS ---

Expression: -2 = -4 >> 1

Decimal:

val=-4

res=-2

Binary:

val=1111111111111111111111111111111111111111111111111111111111111100

res=1111111111111111111111111111111111111111111111111111111111111110

NOTE: copia del bit de signo desplazado al lado izquierdo

Expression: -1 = -4 >> 2

Decimal:

val=-4

res=-1

Binary:

val=1111111111111111111111111111111111111111111111111111111111111100

res=1111111111111111111111111111111111111111111111111111111111111111

NOTE: bits desplazados fuera del lado derecho

Expression: -1 = -4 >> 3

Decimal:

val=-4

res=-1

Binary:

val=1111111111111111111111111111111111111111111111111111111111111100

res=1111111111111111111111111111111111111111111111111111111111111111

NOTE: mismo resultado que arriba; no se puede desplazar más allá del -1

--- DESPLAZAMIENTO DE BITS A LA IZQUIERDA SOBRE ENTEROS POSITIVOS ---

Expression: 8 = 4 << 1

Decimal:

val=4

res=8

Binary:

val=0000000000000000000000000000000000000000000000000000000000000100

res=0000000000000000000000000000000000000000000000000000000000001000

NOTE: ceros rellenan en el lado derecho

Expression: 4611686018427387904 = 4 << 60

Decimal:

val=4

res=4611686018427387904

Binary:

val=0000000000000000000000000000000000000000000000000000000000000100

res=0100000000000000000000000000000000000000000000000000000000000000

Expression: -9223372036854775808 = 4 << 61

Decimal:

val=4

res=-9223372036854775808

Binary:

val=0000000000000000000000000000000000000000000000000000000000000100

res=1000000000000000000000000000000000000000000000000000000000000000

NOTE: bit de signo resulta desplazado fuera

Expression: 0 = 4 << 62

Decimal:

val=4

res=0

Binary:

val=0000000000000000000000000000000000000000000000000000000000000100

res=0000000000000000000000000000000000000000000000000000000000000000

NOTE: bit de signo desplazado fuera del lado izquierdo

--- DESPLAZAMIENTO DE BITS A LA IZQUIERDA SOBRE ENTEROS NEGATIVOS ---

Expression: -8 = -4 << 1

Decimal:

val=-4

res=-8

Binary:

val=1111111111111111111111111111111111111111111111111111111111111100

res=1111111111111111111111111111111111111111111111111111111111111000

NOTE: ceros rellenan en el lado derecho

Expression: -9223372036854775808 = -4 << 61

Decimal:

val=-4

res=-9223372036854775808

Binary:

val=1111111111111111111111111111111111111111111111111111111111111100

res=1000000000000000000000000000000000000000000000000000000000000000

Expression: 0 = -4 << 62

Decimal:

val=-4

res=0

Binary:

val=1111111111111111111111111111111111111111111111111111111111111100

res=0000000000000000000000000000000000000000000000000000000000000000

NOTE: bits desplazados fuera del lado izquierdo, incluyendo el bit de signo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值