JSビット単位
ビット単位演算子は、個々の一連のビットではなく、数値としてのオペランドです。したがって、この前に、私は「ビット」であるものを言及する必要があります。
値または文字0、1、0と1のシーケンスとしてメモリに格納される各ビットと呼ばれ、例えば、10は、コンピュータ内のバイナリデータ2 0 0 0 0 0 0 1として記憶されます0は、我々は、メモリ内のビットの値を変更すると、この意味で表すことの価値は、2前の動きとして、変更された、今ユニット内に格納され、これは値を表す、00000100となりましたビット単位の演算子である小数4の動作原理
ビット演算子6:
&ビットAND
|ビット単位のOR
^ビット単位の排他的論理和
〜否定
>>右
<<左
|ビット単位のOR
^ビット単位の排他的論理和
〜否定
>>右
<<左
1&演算子
いずれかのビットが0であれば&バイナリ演算子は、操作に対応する特定の方法のビット数が1となるように、対応するビット組み合わせた場合、結果は、1であり、結果は0
0001
&0011
---------
0001
決定しようと数が奇数であるかを決定、あるいは、我々は残りの部分を使用します。
関数アサート(N){ 場合(N%2 === 1 ){ console.log(「奇数のnです」)。 } 他{ console.log(「偶数のnです」)。 } } アサート( 3); //は「N-奇数です」
我々はまた、&ビット単位の演算数と1、および高速化によって決定されることができます。
関数アサート(N){ 場合(N - 1 ){ console.log(「奇数のnです」)。 } 他{ console.log(「偶数のnです」)。 } } アサート( 3); //は「N-奇数です」
以下は、ビット演算処理であります:
1 = 0001
3 = 0011
--------
&= 0001
バイナリコードの最後の桁は確か1,1の奇数であり、唯一の最後のビットは、次にビット単位&操作、1であり、結果は最後の桁が1です。最後の数字は0、1、ビット単位&操作のバイナリ表現の偶数であり、すべての桁の結果がゼロです。
限り、誰もあなたが変数&不要なビットは、バイナリ変数は01001001のように表現されるように、0に設定されて使用できるように、演算の結果は、0&0ではありませんように、私は低を維持したいです図4に示すように、4つの高を排除するために、&0x0Fを使用することができるであろう
(:0X 16進数、0x0Fの00001111に対応する2値注)
2 |演算子
| ||演算子と真実は、同じである限り、二つの数が1の数であるとして、結果は1で、他は0です。
0001
| 0011
---------
0011
要求全体をダウンフロートするために、我々は次のメソッドを使用します。
VaRのNUM = Math.floor(1.1)。// 1
我々はまた、全体の動作を見つけるためにサイトを使用することができます。
そこNUM = 1.1 | 0; // 1
実際には、全体のダウン浮動小数点需要かのように、その後の演算整数第1.1ビットになります、浮動小数点演算ビットサポートしていません。1だから| 0は1つの結果です。
3 ^演算子
1つのつのみのリターンビット単位の排他的OR 2つの数の、0を返し、さもなければ。
0001
^ 0011
---------
0010
デジタル自体が得られたデジタルビット単位のXOR演算は、二つの対応する各図面が同じであるため、最終的な0が返され、0です。
デジタルおよび0ビット単位のXOR演算自体は、取得した番号であります
XOR会うの乗算は可換と連想、主に似ています
NUM1 ^ num2の===からnum2 num1を^
NUM1 ^ ^ num2のNUM3 === NUM1 ^(num2の^ NUM3)
1をPROVE: - 表現パーソナルレジェンド、符号ビットがバイナリ0正の符号が+ 10進負の数を示すことによって表されています。
、0:+ - : - +記号でXOR演算、シミュレートします。
1 ^ 1の結果は、0 ^ 0 ^ 0結果が0であるが、結果は1 ^ 0 ^ 1つの0 1つの結果です
正正正、負の負の負、正、正、負の負の負の領土を与えるために
したがって、オペレータ完全進数:NUM1 ^ NUM2 ^ NUM3 === NUM1 ^(NUM2 ^ NUM3)
カルノー図、真理値表、または標準的な式のような2つの式のような、同じ形式に変換されます。デジタル論理方法または論理代数的方法は言った:2いることを証明します
(a♁b)♁c
=(二A'B +「)♁c
=(二A'B + ')C +(2 + A'B')C '
=(A'B ')(AB')C + a'bc' + ab'c」
=(+ B '()' + B)+ C a'bc '+ ab'c'
= ABC + A'B'C + a'bc '+ ab'c'
a♁(b♁c)
= '(b♁c)+(b♁c)'
= '(+ BC B'C' +(B'C + BC ')')
= A'B'C + a'bc '+(B'C')(BC')
= A'B'C + a'bc」+(B + C ')(B' + C)
= A'B'C + a'bc '+ ABC + ab'c'
もちろん、両者が等しく、証明は完了です。
私たちは、多くの場合、2つの数の交換価値に必要です:
そこ NUM1 = 1 NUM2 = 2 、温度; 温度 = NUM1。 NUM1 = num2の。// 2 NUM2 =温度; // 1
あなたはそれができるならば、それを強制的にロードされた場合:
た NUM1 = 1、NUM2 = 2 。 NUM1 = [NUM2、NUM2 = NUM1] [0 ]。 console.log(NUM1)。// 2 にconsole.log(NUM2)。// 1
あなたが安定した時点をインストールしたい場合は、その後、それはすることができます
た NUM1 = 1、NUM2 = 2 。 NUM1 ^ = num2の。// NUM1 = NUM1 ^ NUM2 = 1 ^ 2 = 3 ^ = NUM1 NUM2。// NUM2 = NUM2 ^(NUM1 ^ NUM2)= NUM1 = 1 NUM1 ^ = NUM2。// NUM1 = NUM1 ^ NUM2 ^ NUM1 = NUM2 = 2 にconsole.log(NUM1)。// 2 にconsole.log(NUM2)。// 1
4〜演算子
〜ビット単位の否定である1を0に、0から1
〜4 === -5、-5〜=== 4
整数逆ビット単位の民は、その反対側の数に等しいマイナスA〜NUM = -num-1。
~~ NUM == - (NUM-1)-1 === NUM;数のネゲート結果倍数そのものであります
ビット浮動小数点演算がサポートされていない、それは最初の全体シークかのように下方演算、浮動小数点整数ビットに変換し、次いで、直接小数部分を除去します
〜タイプ(整数への変換は、直接小数部分を除去)、ビット操作は、デジタル、デジタルタイプの動作の種類を非変換にデフォルト設定されます、変換することができます。
以下は、比較演算の結果である真であります
~~ 真 == 1 ; ~~ 偽 == 0 ; ~~ "" == 0 ; ~~ "すべて" == 0 ; ~~ "32all" == 0 ; ~~ "all43" == 0 ; ~~ [] == 0 。 ~~未定義== 0 ; !~~は== 1未定義。 ~~ ヌル == 0 ; ~~!ヌル == 1 ; ~~(5.9)== 5 。 ~~(5.2)== 5 。 ~~(-5.9)== -5。
実際には、ビット単位のOR演算子| 0はこの機能を持っています
5左シフト演算子<<、>>右
ビットシフト値は、左または右で指定されたシフト演算子
<< >>左と位置を越えて移動する権利が失われます移動し、位置は0に空い埋めます
01000000000001 1として(16387 10進数)二つに左側に移動する
(小数点以下12)0 00000000000110
右方向に移動させます二人はあります
(小数点以下12)0 00000000000110
右方向に移動させます二人はあります
000100000000000(小数4096)
この機能の前方への移動に2は、4回の乗算を使用して行うことができます
2 << 1 = 4
3 << 1 = 6
4 << 1 = 8
3 << 1 = 6
4 << 1 = 8
同様に、あなたは分裂を行うことができます>>
それが全体を取ることができ、任意の端数>> 0
>> 0 = 3.14159 3。
0 |デジタルタイプと自然に変換する非デジタルのデフォルトのタイプは〜を操作、行います
暗黙のうちに今内蔵のデジタルタイプの他のタイプを変換する方法JSのいくつかを見ている、デジタルに変換しているビット単位:
1のparseInt(7/2)// 3は、小数部の後に小数部分を廃棄 4 // 2 Math.ceil(7/2)を切り上げ、整数に端数部分に加える。1 。3恐らくMath.round(7/2)/ / 4 丸みを帯びている。 4 Math.floor(7/2)3 //。丸みを帯びたダウン 法5 toFixed数(n)オブジェクト- nは小数点以下を四捨五入します。文字列表現を返しNumberObject。 するvar = 12.3456 A ; document.write(a.toFixed( 2))。 // 12.35
parseInt()
そして、 parseFloat()
私が出会うデジタル文字に解析することができないまで、機能の試みは、文字、数字の前に、すべての数字を返し、その後、文字一つ一つの文字列を解析します。最初の文字がデジタルに解析することができない、则
返されたNaN
文字列が数字を含むように解決できない限り、文字列が変換されるように、数に文字列を変換するために、演算子「+」を使用して NaN
。
VAR S = "10.1asd21" 。 console.log(parseFloatは(S))。// 10.1 にconsole.log( '10ab21'); // 10 parseFloatは( 'a12.21'); // NaNで のparseInt( 'R43'); // のNaN にconsole.log(+ S)。// NaNに
NaN:算術演算又は未定義の値を返すが表現できない場合、NaNが生じます。しかし、
NaN
必ずしも超え状況で表される値の特定の範囲を表していません。いくつかの非数値変換は、時間の数値が得られるにキャストすることはできません
NaN
。
例えば、0は0リターンで割っ
NaN
ゼロ復帰ではなく、他の分割-
代わりに無限NaN
。
JavaScriptは、他の異なる値で、
NaN
のように、決定することが等しくない演算子(== ===と)することができ
NaN == NaN
、そして
NaN === NaN
戻ります
false
。したがって、
isNaN
それは非常に必要です。
ますisNaN(NaNの); // 真 のisNaN(未定義)。// 真 ますisNaN({})。 // 真 のisNaN(真)。 // 偽 ますisNaN(ヌル); // 偽 ますisNaN(37)。 // 偽 // ストリング ますisNaN( "37"); // falseに:値が37に変換することができる ますisNaN( "37.37"); // falseに:値は37.37に変換することができる ますisNaN( ""); // falseに:空の文字列これは、0に変換され ますisNaN(「」); // falseに:スペースを含む文字列は0に変換され、 // 日付 ますisNaN(新しい新しい A日付()); // falseに ますisNaN(新しい新しい ; A日付()のtoString()。) // trueに ますisNaN( "blabla") // trueに:することはできません"blabla"の値
。