<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>javascript on Marketechlabo</title><link>https://www.marketechlabo.com/tags/javascript/</link><description>Recent content in javascript on Marketechlabo</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Wed, 10 Apr 2019 00:00:00 +0900</lastBuildDate><atom:link href="https://www.marketechlabo.com/tags/javascript/index.xml" rel="self" type="application/rss+xml"/><item><title>Javascriptで正規分布の実装まとめ（乱数、累積分布関数など）</title><link>https://www.marketechlabo.com/statistics-analysis/normal-distribution-javascript/</link><pubDate>Wed, 10 Apr 2019 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/statistics-analysis/normal-distribution-javascript/</guid><description>
&lt;p&gt;Javascriptで正規分布の乱数発生（rnorm）、確率密度関数（dnorm）、累積分布関数（pnorm）、累積分布の逆関数（qnorm）を実装する。すべて標準正規分布を想定。
Javascriptに限らず使えるアルゴリズムだが、日本語でまとまっている情報があまりないのと、ブラウザ上でA/Bテストなど有意性をみる検定などできたら面白いということでJSでやってみる。&lt;/p&gt;
&lt;p&gt;なお、実務で手軽に使いたい場合は &lt;a href="https://github.com/stdlib-js/stats-base-dists-normal"&gt;stdlib-js&lt;/a&gt; や &lt;a href="https://jstat.github.io/"&gt;jStat&lt;/a&gt; といったライブラリも検討するとよい。本記事はアルゴリズムの中身を理解する目的で、ライブラリを使わずスクラッチで実装する。&lt;/p&gt;
&lt;h2 id="正規乱数の生成rnorm"&gt;正規乱数の生成（rnorm）&lt;/h2&gt;
&lt;p&gt;1行でBox-Muller法で。&lt;/p&gt;
&lt;h3 id="box-muller法とは"&gt;Box-Muller法とは？&lt;/h3&gt;
&lt;p&gt;$$X_1, X_2 \stackrel{i.i.d.}{\sim} {\rm Unif} (0, 1) $$
とするとき
$$Y_1 = \sqrt{-2 \log{X_1}} \cos{2 \pi X_2} $$
$$Y_2 = \sqrt{-2 \log{X_1}} \sin{2 \pi X_2} $$
で生成される
$$Y_1, Y_2 \stackrel{i.i.d.}{\sim} {\rm N} (0, 1) $$
というもの。
今回は1個の正規乱数でいいので、$Y_1$か$Y_2$の一方を採用すればいい。&lt;/p&gt;
&lt;h3 id="javascriptで実装"&gt;Javascriptで実装&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;rnorm&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;sqrt&lt;/span&gt;(&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;random&lt;/span&gt;())) &lt;span style="color:#f92672"&gt;*&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;cos&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;PI&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;random&lt;/span&gt;());
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;後ろの係数は&lt;code&gt;Math.cos()&lt;/code&gt;でも&lt;code&gt;Math.sin()&lt;/code&gt;でもどちらでもいい。Javascriptの&lt;code&gt;Math.random()&lt;/code&gt;は戻り値の区間が[0,1)なので、$log {0}$で発散しないように&lt;code&gt;1-Math.random()&lt;/code&gt;としている。&lt;/p&gt;
&lt;h2 id="確率密度関数dnorm"&gt;確率密度関数（dnorm）&lt;/h2&gt;
&lt;p&gt;$$Z(x) = \frac{ e^{ -\frac{x^2}{2}} }{\sqrt{2 \pi}} $$
そのまんま&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;dnorm&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;x&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;exp&lt;/span&gt;(&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;x&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;x&lt;/span&gt; &lt;span style="color:#f92672"&gt;/&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;) &lt;span style="color:#f92672"&gt;/&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;sqrt&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;PI&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="累積分布関数pnorm"&gt;累積分布関数（pnorm）&lt;/h2&gt;
&lt;p&gt;Abramowitz and Stegun, Handbook of Mathematical Functions (1964)から。
&lt;a href="https://personal.math.ubc.ca/~cbm/aands/"&gt;https://personal.math.ubc.ca/~cbm/aands/&lt;/a&gt;
26.2が正規分布の累積分布関数の項目。
実際はC. Hastings, Jr., Approximations for Digital Computers (1955)に基づいているとのこと。
26.2.17の
$$P(x) = 1 - Z(x) \left( b_1 t + b_2 t^2 + b_3 t^3 + b_4 t^4 + b_5 t^5 \right) + \epsilon(x) $$
$$t = \frac{1}{1+px}, \quad Z(x) = \frac{ e^{ -\frac{x^2}{2}} }{\sqrt{2 \pi}} $$
$$|\epsilon(x)| \lt 7.5 \times 10^{-8} $$
$$p = .23164 19 $$
$$b_1 = .31938 1530 $$
$$b_2 = -.35656 3782 $$
$$b_3 = 1.78147 7937 $$
$$b_4 = -1.82125 5978 $$
$$b_5 = 1.33027 4429 $$
をそのまま実装&lt;/p&gt;</description></item><item><title>JavaScriptでフラグをビットで管理する～複数の状態フラグを少ない容量で管理</title><link>https://www.marketechlabo.com/web-measurement/bit-flags/</link><pubDate>Tue, 21 Feb 2017 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/web-measurement/bit-flags/</guid><description>
&lt;p&gt;状態を管理する、その状態に応じて条件分岐するやり方。&lt;/p&gt;
&lt;h2 id="フラグをビットで管理するメリットとケース"&gt;フラグをビットで管理するメリットとケース&lt;/h2&gt;
&lt;p&gt;例: ランディングページで「30秒以上滞在」「スクロール深度50%到達」「フォーム入力開始」を検知し、3つとも満たしたユーザーにのみリターゲティング用のカスタムオーディエンスを送る。あるいは、ECサイトで「トップ閲覧」「カテゴリ閲覧」「詳細閲覧」を1つの数値で持ち、商品詳細まで到達したユーザーにのみ関連商品リコメンドのタグを発火させる。
個別の条件を満たしたときにフラグを立て、その組み合わせを参照して処理を分岐させる。
単純に1フラグを1変数にすると変数の数が増える。
そこで1個の変数で複数の状態をまとめて管理する方法がビットによる管理である。
なおこの考え方はJavaScriptに限らずあらゆるプログラム言語で実装が可能。
管理するフラグが多く、メモリ消費や発生するパケットを小さくする必要があるときに重要となる。&lt;/p&gt;
&lt;h2 id="ビット"&gt;ビット&lt;/h2&gt;
&lt;p&gt;ビットは0または1の2値を表す情報の単位
それを8個つなげたもの、&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;11001101&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;は8個の0/1を表す情報を保持している。
&lt;code&gt;11001101&lt;/code&gt;の各桁は0か1しかないので2進数として見ることができる。
これを10進数に置き換えると205ということになる。
8ビットの変数1個（0&lt;del&gt;255の整数）であれば8個のビット（0/1）が収まる。
つまり0&lt;/del&gt;255の整数で8種類の0/1の状態を表せる。
この最小の情報の単位であるビットに対する処理がビット処理である。&lt;/p&gt;
&lt;h2 id="フラグの定義"&gt;フラグの定義&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;DISABLED&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;HOVER&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;ACTIVE&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;1&amp;lt;&amp;lt;桁&lt;/code&gt;で、桁は0からスタート&lt;/p&gt;
&lt;h2 id="フラグを設定代入する"&gt;フラグを設定（代入）する&lt;/h2&gt;
&lt;p&gt;まず状態を表す変数を宣言&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;state&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="フラグdisabledを立てる"&gt;フラグ&lt;code&gt;DISABLED&lt;/code&gt;を立てる&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;state&lt;/span&gt; &lt;span style="color:#f92672"&gt;|=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;DISABLED&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;フラグ&lt;code&gt;DISABLED&lt;/code&gt;と&lt;code&gt;HOVER&lt;/code&gt;を同時に立てる（一度に代入する）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;state&lt;/span&gt; &lt;span style="color:#f92672"&gt;|=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;DISABLED&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;HOVER&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="フラグのセットを作る"&gt;フラグのセットを作る&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;state&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;DISABLED&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;HOVER&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;ACTIVE&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="フラグdisabledを下げる"&gt;フラグ&lt;code&gt;DISABLED&lt;/code&gt;を下げる&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;state&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;~&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;DISABLED&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;フラグを下げる場合は「&lt;code&gt;&amp;amp;&lt;/code&gt;」にするのと否定の「&lt;code&gt;~&lt;/code&gt;」を付ける
フラグ&lt;code&gt;DISABLED&lt;/code&gt;と&lt;code&gt;HOVER&lt;/code&gt;を同時に下げる（一度に代入する）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;state&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;~&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;DISABLED&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;HOVER&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="特定のフラグを反転させる"&gt;特定のフラグを反転させる&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;state&lt;/span&gt; &lt;span style="color:#f92672"&gt;^=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;DISABLED&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="特定のフラグを取り出す"&gt;特定のフラグを取り出す&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;state&lt;/code&gt;の中で&lt;code&gt;DISABLED&lt;/code&gt;に対応するビットの値を抜き出す（これが0でなければ&lt;code&gt;DISABLED&lt;/code&gt;のフラグが立っていることになる）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;state&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;DISABLED&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;state&lt;/code&gt;の中で&lt;code&gt;DISABLED&lt;/code&gt;、&lt;code&gt;HOVER&lt;/code&gt;に対応する部分を抜き出す&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;state&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;DISABLED&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;HOVER&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;これが0でなければ&lt;code&gt;DISABLED&lt;/code&gt;または&lt;code&gt;HOVER&lt;/code&gt;のフラグが立っていることになる&lt;/li&gt;
&lt;li&gt;これが&lt;code&gt;(STATE.DISABLED | STATE.HOVER)&lt;/code&gt;と等しい場合、&lt;code&gt;DISABLED&lt;/code&gt;と&lt;code&gt;HOVER&lt;/code&gt;の両フラグが立っていることになる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;フラグの取り出しは条件判定で使うことになる。&lt;/p&gt;
&lt;h2 id="逆引き"&gt;逆引き&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;やりたいこと&lt;/th&gt;
&lt;th&gt;演算方法&lt;/th&gt;
&lt;th&gt;演算子&lt;/th&gt;
&lt;th&gt;変更したいビット&lt;/th&gt;
&lt;th&gt;そのままにしたいビット&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ビットをすべて反転させたい&lt;/td&gt;
&lt;td&gt;NOT&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;すべて変更される&lt;/td&gt;
&lt;td&gt;指定不可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;一部のビットを反転させたい&lt;/td&gt;
&lt;td&gt;XOR&lt;/td&gt;
&lt;td&gt;&lt;code&gt;^&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;反転させたいビット: 1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;一部のビットをONにしたい&lt;/td&gt;
&lt;td&gt;OR&lt;/td&gt;
&lt;td&gt;`&lt;/td&gt;
&lt;td&gt;`&lt;/td&gt;
&lt;td&gt;ONにしたいビット: 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;一部のビットをOFFにしたい&lt;/td&gt;
&lt;td&gt;AND&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OFFにしたいビット: 0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="条件判定"&gt;条件判定&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;state&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;DISABLED&lt;/span&gt;) { &lt;span style="color:#a6e22e"&gt;処理&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;state&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;DISABLED&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;HOVER&lt;/span&gt;)) { &lt;span style="color:#a6e22e"&gt;処理&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;!!&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;state&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;STATE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;DISABLED&lt;/span&gt;) &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;処理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ビットを使った条件"&gt;ビットを使った条件&lt;/h2&gt;
&lt;p&gt;UIの状態管理の例。ボタンが無効でなく、かつホバー中の場合にのみクリック処理を実行する。&lt;/p&gt;</description></item></channel></rss>