当前位置: 首页 > news >正文

导航类网站模板网站首页 动画案例

导航类网站模板,网站首页 动画案例,流行网站开发工具,php做数据网站位运算是一种计算机编程中常用的操作#xff0c;它直接对二进制位进行操作。二进制#xff0c;指的就是以二为底的一种计数方式#xff0c;常见的还有八进制、十进制、十六进制。 十进制0123456789101112131415二进制0000000100100011010001010110011110001001101010111100…位运算是一种计算机编程中常用的操作它直接对二进制位进行操作。二进制指的就是以二为底的一种计数方式常见的还有八进制、十进制、十六进制。 十进制0123456789101112131415二进制0000000100100011010001010110011110001001101010111100110111101111八进制012345671011121314151617十六进制0123456789ABCDEF 我们经常会使用二进制来进行计算基于二进制的位运算能够很方便的表达“增、删、查、改”。 例如一个后台管理系统一般的话会有针对权限的控制一般权限的控制就使用的是二进制 // 各个权限 permissions {SYS_SETTING : {value : 0b10000000,info : 系统重要设置权限},DATA_ADMIN : {value : 0b01000000,info : 数据库管理权限},USER_MANG : {value : 0b00100000,info : 用户管理权限},POST_EDIT : {value : 0b00010000,info : 文章编辑操作权限},POST_VIEW : {value : 0b00001000,info : 文章查看权限} }再例如在 linux 操作系统里面x 代表可执行权限w代表可写权限r 代表可读权限对应的权限值分别就是1、2、42 的幂次方 使用二进制来表示权限首先速度上面会更快一些其次在表示多种权限的时候会更加方便一些。 比如现在有 3 个权限 A、B、C… 根据不同的权限做不同的事情 if(value A){// ... } else if(value B){// ... }在上面的代码中会有一个问题目前仅仅只是一对一的关系但是在实际开发中往往有很多一对多的关系一个 value 可能会对应好几个值。 二进制相关的运算 与 只要有一位数为 0那么最终结果就是 0也就是说必须两位都是 1最终结果才是 1 1 1 10000 0001 0000 0001 --------- 0000 00011 0 00000 0001 0000 0000 --------- 0000 0000或 | : 只要有一位数是 1那么最终结果就是 1也就是说必须两个都是 0最终才是 0 1 | 0 10000 0001 0000 0000 --------- 0000 0001非 ~ : 对一个二进制数逐位取反也就是说 0、1 互换 ~3 0000 0011 // 逐位取反 1111 1100 // 计算结果最终为 -4涉及到补码的知识异或 ^ : 如果两个二进制位不相同那么结果就为 1相同就为 0 1 ^ 0 10000 0001 0000 0000 --------- 0000 0001左移运算将一个数的二进制表示向左移动指定的位数右边补0。 12 4 0000 0001 // 向左移动2位 0000 0100右移运算将一个数的二进制表示向右移动指定的位数左边补0或者补符号位对于有符号数。 421 0000 0100 // 向右移动2位 0000 0001接下来我们来看一下位运算在权限系统里面的实际运用 下载打印查看审核详细删除编辑创建00000000 如果是 0代表没有权限如果是 1代表有权限 0000 0001 代表只有创建的权限0010 0011 代表有查看、编辑以及创建的权限 添加权限 直接使用或运算即可。 0000 0011 目前有创建和编辑的权限我们要给他添加一个查看的权限 0010 0000 0000 0011 0010 0000 --------- 0010 0011删除权限 可以使用异或 0010 0011 目前有查看、编辑和创建取消编辑的权限 0000 0010 0010 0011 0000 0010 --------- 0010 0001判断是否有某一个权限 可以使用与来进行判断 0011 1100查看、审核、详细、删除判断是否有查看0010 0000权限、再判断是否有创建0000 0001权限 0011 1100 0010 0000 --------- 0010 0000// 判断是否有“查看”权限做与操作时得到了“查看”权限值本身说明有这个权限0011 1100 0000 0001 --------- 0000 0000// 最终得到的值为 0说明没有此权限通过上面的例子我们会发现使用位运算确确实实非常的方便接下来我们就来看一下 React 中针对位运算的使用。 React 中的位运算 fiber 的 flagslane 模型上下文 fiber 的 flags 在 React 中用来标记 fiber 操作的 flags使用的就是二进制 export const NoFlags /* */ 0b000000000000000000000000000; export const PerformedWork /* */ 0b000000000000000000000000001; export const Placement /* */ 0b000000000000000000000000010; export const DidCapture /* */ 0b000000000000000000010000000; export const Hydrating /* */ 0b000000000000001000000000000; // ...这些 flags 就是用来标记 fiber 状态的。 之所以要专门抽离 fiber 的状态是因为这种操作是非常高效的。针对一个 fiber 的操作可能有增加、删除、修改但是我不直接进行操作而是给这个 fiber 打上一个 flag接下来在后面的流程中针对有 flag 的 fiber 统一进行操作。 通过位运算就可以很好的解决一个 fiber 有多个 flag 标记的问题方便合并多个状态 // 初始化一些 flags const NoFlags 0b00000000000000000000000000; const PerformedWork 0b00000000000000000000000001; const Placement 0b00000000000000000000000010; const Update 0b00000000000000000000000100;// 一开始将 flag 变量初始化为没有 flag也就是 NoFlags let flag NoFlags// 这里就是在合并多个状态 flag flag | PerformedWork | Update// 要判断是否有某一个 flag直接通过 来进行判断即可 //判断是否有 PerformedWork 种类的更新 if(flag PerformedWork){//执行console.log(执行 PerformedWork) }//判断是否有 Update 种类的更新 if(flag Update){//执行console.log(执行 Update) }if(flag Placement){//不执行console.log(执行 Placement) }lane 模型 lane 模型也是一套优先级机制相比 Schedulerlane 模型能够对任务进行更细粒度的控制。 export const NoLanes: Lanes /* */ 0b0000000000000000000000000000000; export const NoLane: Lane /* */ 0b0000000000000000000000000000000;export const SyncLane: Lane /* */ 0b0000000000000000000000000000001;export const InputContinuousHydrationLane: Lane /* */ 0b0000000000000000000000000000010; export const InputContinuousLane: Lane /* */ 0b0000000000000000000000000000100; // ...例如在 React 源码中有一段如下的代码 // lanes 一套 lane 的组合 function getHighestPriorityLanes(lanes) {// 从 lanes 这一套组合中分离出优先级最高的 laneswitch (getHighestPriorityLane(lanes)) {case SyncLane:return SyncLane;case InputContinuousHydrationLane:return InputContinuousHydrationLane;case InputContinuousLane:return InputContinuousLane;// ...return lanes;} }// lane 在表示优先级的时候大致是这样的 // 0000 0001 // 0000 0010 // 0010 0000 // lanes 表示一套 lane 的组合比如上面的三个 lane 组合到一起就变成了一个 lanes 0010 0011 // getHighestPriorityLane 这个方法要做的事情就是分离出优先级最高的 // 0010 0011 ---- getHighestPriorityLane ----- 0000 0001export function getHighestPriorityLane(lanes) {return lanes -lanes; }假设现在我们针对两个 lane 进行合并 const SyncLane: Lane /* */ 0b0000000000000000000000000000001; const InputContinuousLane: Lane /* */ 0b0000000000000000000000000000100;合并出来就是一个 lanes合并出来的结果如下 0b0000000000000000000000000000001 0b0000000000000000000000000000100 --------------------------------- 0b00000000000000000000000000001010b0000000000000000000000000000101 是我们的 lanes接下来取负值 -lanes 0b1111111111111111111111111111011最后一步再和本身的 lanes 做一个 操作 0b0000000000000000000000000000101 0b1111111111111111111111111111011 --------------------------------- 0b0000000000000000000000000000001经过 操作之后就把优先级最高的 lane 给分离出来了。 上下文 在 React 源码内部有多个上下文 // 未处于 React 上下文 export const NoContext /* */ 0b000; // 处于 batchedUpdates 上下文 const BatchedContext /* */ 0b001; // 处于 render 阶段 export const RenderContext /* */ 0b010; // 处于 commit 阶段 export const CommitContext /* */ 0b100;当执行流程到了 render 阶段那么接下来就会切换上下文切换到 RenderContext let executionContext NoContext; // 一开始初始化为没有上下文 executionContext | RenderContext;在执行方法的时候就会有一个判断判断当前处于哪一个上下文 // 是否处于 RenderContext 上下文中结果为 true (executionContext RenderContext) ! NoContext// 是否处于 CommitContext 上下文中结果为 false (executionContext CommitContext) ! NoContext如果要离开某一个上下文 // 从当前上下文中移除 RenderContext 上下文 executionContext ~RenderContext; // 是否处于 RenderContext 上下文中结果为 false (executionContext CommitContext) ! NoContext真题解答 题目React 中哪些地方用到了位运算 参考答案 位运算可以很方便的表达“增、删、改、查”。在 React 内部像 flags、状态、优先级等操作都大量使用到了位运算。 细分下来主要有如下的三个地方 fiber 的 flagslane 模型上下文
http://www.zqtcl.cn/news/867715/

相关文章:

  • seo优化网站模板网站建设的七大优缺点
  • 天猫国际采取的跨境电商网络营销方式关键词排名优化公司推荐
  • 亳州建设网站做网站文字怎么围绕图片
  • 网站开发 项目计划外链建设给网站起的作用
  • 你好南京网站网站开发实施步骤和说明
  • 文化共享工程网站建设情况wordpress菠菜插件
  • 网站大气是什么意思哈尔滨做网站电话
  • 公司网站站群是什么化妆品网站设计欣赏
  • 网站公司未来计划ppt怎么做平潭做网站
  • 做网站和推广工资多少招聘网站建设价格
  • 网站建设 响应式 北京网架公司十大排名榜
  • 网站推广目标关键词是什么意思网站推广软件工具
  • 哪里可以做免费的物流网站wordpress为什么放弃
  • 做网站需要多少钱 都包括什么高端大气的网站首页
  • 黄石做网站联系最近的国际新闻
  • 网站建设与运营的预算方案淘宝禁止了网站建设类
  • 做网站的顺序编写app的软件
  • 站长联盟个人网站不备案
  • 惠州建设工程交易网站网站服务器失去响应
  • 网站下拉广告iphone app wordpress
  • 网站图片怎样做seo优化如何重新安装wordpress
  • python做网站源码长沙建设网站制作
  • wordpress调用分类的所有子目录龙岩seo公司首荐3火星
  • 聊城市建设工程质量监督站网站wordpress 头部
  • 低价郑州网站建设wordpress是外网吗
  • 互联网门户网站有哪些win10优化大师是官方的吗
  • 深圳品牌做网站公司有哪些公司名称变更网站要重新备案吗
  • 网站网页建设实训心得体会二类电商平台都有哪些
  • 兰州免费网站建设上海城隍庙要门票吗
  • 如何做外贸soho做网站中型网站建设