Home >Backend Development >PHP Tutorial >php中二进制运算的作用是什么

php中二进制运算的作用是什么

WBOY
WBOYOriginal
2016-06-06 20:52:051086browse

经常看到这种二进制运算

define("T_CHINESE", 1);     //中文 
define("T_SEP", 1 <p>用一个Int 的位,表示一种类型。比如中文数字就是 T_CHINESE | T_NUM,为什么可以这样用?<br>
看到的书上都是简单介绍下二进制运算,并没有相关运用,哪儿可以补相关知识。</p>
                            
                        


                                                                                                                        
                     <h2>回复内容:</h2>
                      
                                                            <p>经常看到这种二进制运算</p><pre class="brush:php;toolbar:false">define("T_CHINESE", 1);     //中文 
define("T_SEP", 1 <p>用一个Int 的位,表示一种类型。比如中文数字就是 T_CHINESE | T_NUM,为什么可以这样用?<br>
看到的书上都是简单介绍下二进制运算,并没有相关运用,哪儿可以补相关知识。</p>
                            
                        
            <p class="answer fmt" data-id="1020000000098316">
                                    </p><p>实际上你对这个问题看得这么费力,是因为php本身造成的,为什么这么说呢?因为在php 5.4之前,它居然不支持直接的二进制表达数字,比如我们在其它语言里常见的<code>0b0001</code>,在php里是无法识别的,而只支持16进制的<code>0x01</code>。在php 5.4里终于加入了对<code>0b</code>表达二进制数的支持,因此上面的代码可以用如下方法表达</p><pre class="brush:php;toolbar:false">define("T_CHINESE", 0b0000001);     //中文 
define("T_SEP", 0b0000010);    //分割符合 
define("T_NUM", 0b0000100);    //数字 
define("T_INDEX", 0b0001000);  //索引 
define("T_LETTER", 0b0010000); //字母 
define("T_WORD", 0b0100000);   //正常单词 
define("T_OTHER", 0b1000000);

移位运算也非常简单,通过我对上面的代码的转换可以很容易看出来

1 <p>而逻辑运算就更简单了</p>
                            
            <p class="answer fmt" data-id="1020000000098317">
                                    </p><p>这种掩码位操作在相对底层一点的高级语言(比如C)里用得比较多, 你可以用一个32bit的无符号int(4字节)保存32个状态, 相对来讲比较省内存</p><p>比如STATUS = 0xffffffff & ( T_CHINESE | T_INDEX ); //代表既是中文又是索引</p><p>那判断状态的时候 STATUS & T_CHINESE 或者 STATUS & T_INDEX 返回的就是正值,代表中文,索引</p><p>而 STATUS & T_NUM 或者STATUS & T_LETTER返回的就是0, 代表非数字非字母了</p>
                            
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn