您当前的位置:首页 > 互联网教程

关于php 位运算符的问题

发布时间:2025-05-24 02:18:23    发布人:远客网络

关于php 位运算符的问题

一、关于php 位运算符的问题

1、这个涉及到系统底层,WEB开发中几乎没用到,知道下有这个东西就好了。底层的东西解释总是简单不了的。

2、变量在内存中的存放都是二进制数字。整数在32位系统上是占用4字节,一个字节是8位,也就是32位,位运算就是位级的运算操作了。

3、$a<<$b Shift left(左移)将$a中的位向左移动$b次(每一次移动都表示“乘以 2”)。

4、假定变量$a的值是 3,$b的值是 2。

5、那么$a在内存中的存放的格式是:

6、00000000 00000000 00000000 00000011

7、每执行一次左移,都将所有的位向左移动,右边补零,左边超过的舍弃。

8、00000000 00000000 00000000 00011000

9、也就是 12。相当于 3× 2× 2= 12。

10、$a>>$b Shift right(右移)将$a中的位向右移动$b次(每一次移动都表示“除以 2”)。

11、假定变量$a的值是 24,$b的值是 2。

12、那么$a在内存中的存放的格式是:

13、00000000 00000000 00000000 00011000

14、每执行一次右移,都将所有的位向由移动,右边超过的舍弃,左边空出的位补零。

15、00000000 00000000 00000000 00000110

16、也就是 6。相当于 24÷ 2÷ 2= 6。

17、位移运算是系统底层运算,运算的速度比乘除还要快很多,优化代码优化到极致的时候,可以将数换算成二的公倍数,然后进行位移计算。但在WEB开发中几乎没有任何必要,而且超过系统底层了,程序在的可移植性就会降低。

18、其他的位运算符也是差不多的。比如:

19、$a&$b And(按位与)将把$a和$b中都为 1的位设为 1。

20、假定变量$a的值是 5,$b的值是 6。

21、00000000 00000000 00000000 00000101

22、00000000 00000000 00000000 00000110

23、00000000 00000000 00000000 00000101

24、00000000 00000000 00000000 00000110

25、───────────────────────────

26、00000000 00000000 00000000 00000100

27、竖的看,上下都是 1的得到 1,否则就是 0。

28、~$a Not(按位非)将$a中为 0的位设为 1,反之亦然。

29、00000000 00000000 00000000 00000101

30、───────────────────────────

31、11111111 11111111 11111111 11111010

32、如果$a是有符号整数,第一位是符号位,1表示负数,那么~$a=-2147483642。

33、如果$a是无符号整数,第一位还是数据位,那么~$a= 4294967290。

34、$a|$b Or(按位或)将把$a或者$b中为 1的位设为 1。

35、$a ^$b Xor(按位异或)将把$a和$b中不同的位设为 1。

36、平常说的几位的系统,就是系统处理整数的时候,是多少个位同时计算的,上面的例子都是基于32位系统。因为移动时超过的位将被舍弃,如果是64位或12位的,位移的结果就可能不一样了,要将计算时位的数量调整下。

二、php画图功能有什么用途

1、在php中,使用php画图功能,在访问php文件时可以出现我们绘制的图像;php画图功能可以应用于报表的开发、验证码的设计、图片的水印和缩略。

2、在介绍php画图功能之前,我们首先需要了解一下php中的绘图坐标系:

3、php坐标系中,坐标原点位于左上角,以像素为单位。(推荐学习:PHP编程从入门到精通)

4、坐标(x,y)——第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标点y个像素。

5、特别说明:像素不是一个长度单位,而是一个密度单位。理论上,分辨率越小,一个像素所占的长度会大大一些。

6、(2)绘制需要的各种图形(圆,直线,矩形,弧线,扇形...)

7、(3)输出图像到网页,也可以另存(可以另存为网站开发常见的几种图片格式,基于存储格式问题)

8、//echo"<br/>".dechex(rand(1,15))."<br/>";

9、$checkCode.=dechex(rand(1,15));

10、$_SESSION['myCheckCode']=$checkCode;

11、$img=imagecreatetruecolor(110, 30);

12、$bgcolor=imagecolorallocate($img, 0, 0, 0);

13、 imagefill($img, 0, 0,$bgcolor);

14、$white=imagecolorallocate($img, 255, 255, 255);

15、$blue=imagecolorallocate($img, 0, 0, 255);

16、$red=imagecolorallocate($img, 255, 0, 0);

17、$green=imagecolorallocate($img, 0, 255, 0);

18、 imageline($img, rand(0,110), rand(0,30), rand(0,110), rand(0,30),

19、 imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255)));

20、 imagestring($img, rand(1,5), rand(2,80), rand(2,10),$checkCode,$white);

21、//array imagefttext(string$font_file, string$text [,array$extrainfo)

22、//imagettftext($img,15,10,20,25,$white,"STXINWET.TTF","北京你好");

23、 header("content-type: image/png");

24、?>用于登录界面(这里只提供部分代码,但是不影响理解,可删除无关内容,直接使用)

25、<form action="loginProcess.php" method="post">

26、<tr><td>用户id</td><td><input type="text" name="id" value="<?php echo getCookieVal("id");?>"/></td></tr>

27、<tr><td>密码</td><td><input type="password" name="password"/></td></tr>

28、<tr><td>验证码</td><td><input type="text" name="checkCode"/>

29、<img src="checkCode.php" onClick="this.src='checkCode.php?aa='+Math.random()"/></td></tr>

30、<tr><td colspan="2">是否保存用户id<input type="checkbox" value="yes" name="keep"></td></tr>

31、<tr><td><input type="submit" value="用户登录"/></td>

32、<td><input type="reset" value="重新填写"/></td></tr>

三、php编程输出100以内的素数

用函数实现1-100中素数的算法如下:

<?php//定义函数function sushu(){//求100以内质数

编写Python程序求1000以内的质数

if(n%i==0)i在2到n-1之间任取一个数,如果n能被整除则不是素数,否则就是素数

if(n%i==0)/*i在2到n/2之间任取一个数,如果n能被整除则不是素数,否则就是素数

3、for(i=2;i<(n=sqrt(n));i++)

if(n%i==0)/*i在2到sqrt(n)之间任取一个数,如果n能被整除则不是素数,否则就是素数,在下省了下面的输出步骤*/

参考资料来源:百度百科-PHP(超文本预处理器)