<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[飞宇的博客]]></title>
  <link href="https://zhoufeiyu.com/atom.xml" rel="self"/>
  <link href="https://zhoufeiyu.com/"/>
  <updated>2021-09-23T22:14:58+08:00</updated>
  <id>https://zhoufeiyu.com/</id>
  <author>
    <name><![CDATA[]]></name>
    
  </author>
  <generator uri="http://www.mweb.im/">MWeb</generator>
  
  <entry>
    <title type="html"><![CDATA[使用二进制位标记状态]]></title>
    <link href="https://zhoufeiyu.com/16323888294456.html"/>
    <updated>2021-09-23T17:20:29+08:00</updated>
    <id>https://zhoufeiyu.com/16323888294456.html</id>
    <content type="html"><![CDATA[
<p>笔者实战过程中经常使用到一组二进制位来标记状态，因此也就涉及到对指定位进行修改操作，代码示例使用Go来实现</p>
<h2><a id="go%E4%BD%8D%E8%BF%90%E7%AE%97%E7%9B%B8%E5%85%B3%E7%9F%A5%E8%AF%86" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>Go 位运算相关知识</h2>
<pre><code class="language-plain_text">&amp;      位运算 AND
|      位运算 OR
^      位运算 XOR
&amp;^     位清空 (AND NOT)
&lt;&lt;     左移
&gt;&gt;     右移
</code></pre>
<h2><a id="%E4%BF%AE%E6%94%B9%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%95%B0%E4%B8%AD%E6%8C%87%E5%AE%9A%E4%BD%8D" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>修改二进制数中指定位</h2>
<h3><a id="%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>示例代码</h3>
<pre><code class="language-go">func ModifyStatus(status int, indexOf int, to bool) int{
	if to{
		return status | (1 &lt;&lt; indexOf)
	}else{
		return status &amp;^ (1 &lt;&lt; indexOf)
	}
}
</code></pre>
<p>代码中indexOf为从右往左数第几位</p>
<h3><a id="%E6%B5%8B%E8%AF%95%E6%A0%B7%E4%BE%8B" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>测试样例</h3>
<pre><code class="language-go">func main() {
	status := 0
	fmt.Printf(&quot;%08b\n&quot;, status) //00000000
	status = ModifyStatus(status, 0, true)
	fmt.Printf(&quot;%08b\n&quot;, status) //00000001
	status = ModifyStatus(status, 0, false)
	fmt.Printf(&quot;%08b\n&quot;, status) //00000000
	status = ModifyStatus(status, 3, true)
	fmt.Printf(&quot;%08b\n&quot;, status) //00001000
	status = ModifyStatus(status, 3, false)
	fmt.Printf(&quot;%08b\n&quot;, status) //00000000
}
</code></pre>
<pre><code class="language-plain_text">00000000
00000001
00000000
00001000
00000000
</code></pre>
<h2><a id="%E5%88%A4%E6%96%AD%E6%9F%90%E4%B8%80%E4%BD%8D%E4%BA%8C%E8%BF%9B%E5%88%B6%E4%BD%8D%E4%BD%BF%E7%94%A8%E4%B8%BA1%E6%88%960" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>判断某一位二进制位使用为1或0</h2>
<pre><code class="language-go">func CheckStatus(status int, indexOf int, to bool) bool{
	if to{
		return status | (1 &lt;&lt; indexOf) == status
	}else{
		return status &amp;^ (1 &lt;&lt; indexOf) == status
	}
}
</code></pre>
<h3><a id="%E6%B5%8B%E8%AF%95%E6%A0%B7%E4%BE%8B" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>测试样例</h3>
<pre><code class="language-go">func main() {
	status := 119
	fmt.Printf(&quot;%08b\n&quot;, status) //01110111
	fmt.Println(CheckStatus(status, 3,false)) // true
	fmt.Println(CheckStatus(status, 1,true)) // true
	fmt.Println(CheckStatus(status, 1,false)) // false
}
</code></pre>
<pre><code class="language-plain_text">01110111
true
true
false
</code></pre>
<h2><a id="%E4%BD%BF%E7%94%A8%E4%BA%8C%E8%BF%9B%E5%88%B6%E4%BD%8D%E4%BC%98%E5%85%88%E7%BA%A7%E6%A0%87%E8%AE%B0%E6%9D%83%E9%99%90" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>使用二进制位优先级标记权限</h2>
<p>假设使用8位二进制数表示状态，其中3位为权限标记位，使用最高3位来表示，优先级越高位越高。依次为账号是否可用，账号是否为标准用户态，账号是否为管理员</p>
<pre><code class="language-plain_text">0xxxxxxx 账号被禁用
1xxxxxxx 账号为非标准用户
11xxxxxx 账号为标准用户
111xxxxx 账号为管理员
</code></pre>
<p>判断账号是否可用仅需判断status &gt;= 128</p>
<p>判断账号是否为标准用户判断status &gt;= 192</p>
<p>判断账号是否为管理员判断status &gt;= 224</p>
<p>无需关心其他状态位</p>
<p>三个状态为将用户权限划分为4个区间<br />
管理员 标准用户 非标准用户 禁用用户</p>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[学习日志]]></title>
    <link href="https://zhoufeiyu.com/study.html"/>
    <updated>2021-09-23T13:35:39+08:00</updated>
    <id>https://zhoufeiyu.com/study.html</id>
    <content type="html"><![CDATA[
<h2><a id="2021" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>2021</h2>
<h3><a id="%E6%8A%80%E6%9C%AF%E7%B1%BB" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>技术类</h3>
<ul>
<li class="task-list-item"><input type="checkbox" disabled="" /> <a href="https://u.geekbang.org/subject/bigdata">大数据训练营——极客时间</a></li>
<li class="task-list-item"><input type="checkbox" disabled="" /> <a href="https://u.geekbang.org/subject/go">Go进阶训练营——极客时间</a></li>
<li class="task-list-item"><input type="checkbox" disabled="" /> <a href="https://u.geekbang.org/subject/cloudnative">云原生训练营——极客时间</a></li>
<li class="task-list-item"><input type="checkbox" disabled="" /> <a href="https://u.geekbang.org/subject/algorithm3rd">算法训练营2021版——极客时间</a></li>
<li class="task-list-item"><input type="checkbox" disabled="" /> <a href="https://time.geekbang.org/column/intro/139">MySQL实战45讲——极客时间</a></li>
<li class="task-list-item"><input type="checkbox" checked="" disabled="" /> <a href="https://item.jd.com/13131372.html">《Go微服务实战》</a></li>
</ul>
<h3><a id="%E5%85%B6%E4%BB%96" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>其他</h3>
<ul>
<li class="task-list-item"><input type="checkbox" disabled="" /> <a href="https://item.jd.com/12695797.html">《刑法学讲义》</a></li>
<li class="task-list-item"><input type="checkbox" checked="" disabled="" /> <a href="https://item.jd.com/13055622.html">《香帅财富报告：分化时代的财富选择》</a></li>
<li class="task-list-item"><input type="checkbox" disabled="" /> <a href="https://time.geekbang.org/column/intro/100083301">程序员的个人财富课——极客时间</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[关于我]]></title>
    <link href="https://zhoufeiyu.com/about.html"/>
    <updated>2021-09-23T10:56:46+08:00</updated>
    <id>https://zhoufeiyu.com/about.html</id>
    <content type="html"><![CDATA[
<p>你好，我是飞宇，最近沉迷于 Go、微服务架构及云原生这一生态圈子里的东西（努力学习中），偶尔也会从程序员的视角分享一些理财相关的东西。在工作中，目前主要负责公司的数据平台的后端开发， 欢迎大家来找我玩和讨论问题，提建议也随时欢迎。</p>
<h2><a id="%E8%81%94%E7%B3%BB%E6%96%B9%E5%BC%8F%EF%BC%9A" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>联系方式：</h2>
<ul>
<li>Github：<a href="https://github.com/ferrisz">https://github.com/ferrisz</a></li>
<li>公众号：周飞宇</li>
<li>邮箱：<a href="mailto:feiyu.zhou@outlook.com">feiyu.zhou@outlook.com</a></li>
</ul>
<h2><a id="%E6%88%91%E7%9A%84%E5%85%AC%E4%BC%97%E5%8F%B7" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>我的公众号</h2>
<p>平时计划分享 Go 语言、微服务架构和云原生相关的想法，欢迎关注我的公众号：</p>
<center>
<img src="https://static.zhoufeiyu.com/media/2021/09/23/qrcodeforghd339433c825d258.jpg"/>
</center>

]]></content>
  </entry>
  
</feed>
