菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
2229
1

神奇的位非运算

原创
05/13 14:22
阅读数 2817

php位运算

<?php
echo ~48&~75;
/**
 * 最好了解下二进制的四则运算和位运算以及运算电路的相关涉及知识^_^
 * 48的二进制值是:00110000 十六进制值是:ffffff30【我系统是64位的输出的结果就是这样】
 * 其实呢计算机内存在存储数据的时候会把负数转换为补码存储【正数的原码,反码,补码完全一样】
 * 而负数呢最高位为1用于表示负数,它的反码呢和正数是相反的,需要将0转换为1,1转换为0,补码操作就是加1操作
 * 当然不同位数的内存长度不一样
 *
 * 75的二进制值是:01001011[我按8位算] 【如果是16位的就是:11111111 01001011,32位,64位的也是同样的道理】
 * echo ~48;//结果为-49
 *          //1、转换为二进制时结果为:00110000【64位系统十六进制就是ffffff30】
 *          //2、此时反码为:11001111【64位系统十六进制就是ffffffcf】
 *          //3、减1操作为:11001110 【64位系统十六进制就是ffffffce】【11111111 11111111 11111111 11001110】
 *          //4、还原为:00110001【64位系统十六进制就是80000031】【二进制为:10000000  00000000 00000000 00110001】
 *          //5、二进制求和结果为:1+16+32=49【注意二进制的最高位1表示负数】输出的结果是:-49
 *
 * echo ~75;//结果为-76,一样的套路
 *
 * echo ~48&~75;//结果却是124
 * 1、48的反码结果为:1100 1111
 * 2、75的的码结果为:1011 0100
 * 3、它们俩相与结果为:1000 0100  【十六进制为:ffffff84】【减1操作后为ffffff83】【自己想想十六进制如何数数^_^】
 * 4、还原后为:0111 1100【十六进制为:8000007c】【二进制结果为:10000000  00000000 00000000 01111100】
 * 5、求和结果为:-124
 */

它的结果是:-124!!!
神奇的位非运算
其实这是基础了,对于一些牛人确实没有什么卵用【不过有的朋友还真问我了,有些小伙伴还真不知道结果是如何运算出来的,做学问在于细节嘛,切勿浮躁自大^_^】

发表评论

0/200
2229 点赞
1 评论
收藏
为你推荐 换一批