| LiveCode 論理演算ノート
						
						 | 
						
						index@kenjikojima.com | |
| 
 | ||
| 
 | ||
10進数 <-> 2進数 変換:LiveCodeのシンタックス baseConvert(変換する数,変換する数の元の進数(originalBase),変換させる先の進数(destinationBase))
			
			
			AND演算 bitAnd
			 :両方が1なら1。それ以外は0。「論理積」
			
			
1 and 1 -> 1 0 and 1 -> 0 1 and 0 -> 0 0 and 0 -> 0 LiveCodeでの演算 バイナリーの演算 bitAnd のシンタックス:number1 bitAnd number2 10101001 (binary 1) baseConvert(10101001,2,10) -> 169 (10進数) 11110000 (binary 2) baseConvert(11110000,2,10) -> 240 (10進数) ------------------------ 10100000 (the result) 169 bitAnd 240 -> 160 baseConvert(160,10,2) -> 10100000 LiveCodeのrepeatを使ったbitAnd repeat with i= the num of chars of binary1 down to 1 if char i of binary1 is 1 and char i of binary2 is 1 then put 1 before tBit else put 0 before tBit end if end repeat
			
			
			OR演算 bitOr
			 :どちらかが1なら1。それ以外は0。「論理和」
			
			
1 and 1 -> 1 0 and 1 -> 1 1 and 0 -> 1 0 and 0 -> 0 LiveCodeでの演算 バイナリーの演算 bitOr のシンタックス:number1 bitOr number2 10101001 (binary 1) baseConvert(10101001,2,10) -> 169 (10進数) 11110000 (binary 2) baseConvert(11110000,2,10) -> 240 (10進数) ------------------------ 11111001 (the result) 169 bitOr 240 -> 249 baseConvert(249,10,2) -> 11111001 LiveCodeのrepeatを使ったbitOr repeat with i= the num of chars of binary1 down to 1 if char i of binary1 is 0 and char i of binary2 is 0 then put 0 before tBit else put 1 before tBit end if end repeat
			
			XOR演算 bitXor  :両方が同じなら0。どちらかが違っていれば1。「排他的論理和」
			
			
1 and 1 -> 0 0 and 1 -> 1 1 and 0 -> 1 0 and 0 -> 0 XOR演算は視聴覚の分離と融合でワンタイム・パッドで使用しました。 LiveCodeでの演算 バイナリーの演算 bitXor のシンタックス:number1 bitXor number2 10101001 (binary 1) baseConvert(10101001,2,10) -> 169 (10進数) 11110000 (binary 2) baseConvert(11110000,2,10) -> 240 (10進数) ------------------------ 01011001 (the result) 169 bitOr 240 -> 89 baseConvert(89,10,2) -> 1011001 7桁を返す format("%08s",baseConvert(89,10,2)) -> 01011001 format(%[0 & charLength]s,数値) は桁数を揃えるファンクション LiveCodeのrepeatを使ったbitXor repeat with i= the num of chars of binary1 down to 1 if char i of binary1 is char i of binary2 then put 0 before tBit else put 1 before tBit end if end repeat
			
			
			NOT演算 bitNot
			 :1つの値が反転する演算をする。1ならば0。0ならば1。「論理否定」
			
			
1 -> 0
0 -> 1
1 -> 0
0 -> 1
				LiveCodeでの演算 
バイナリーの演算				bitNot のシンタックス:bitNot number
10101001 (binary)		baseConvert(10101001,2,10) -> 169 (10進数)
------------------------	bitNot 169 -> 4294967126 (結果はバグと思われます)
01010110 (the result)		10進数では baseConvert(01010110,2,10) -> 86にならなくてはいけない
				bitNot 1 -> 0 とならなくてはいけないのですが 4294967294 を返します
				
				bitNotのバグ修正するファンクション 
				-- 10進数からNOT演算の10進数を返す。パラメータ「pBase10Num」は10進数
				function bugFixedBitNot pBase10Num
				   put baseConvert(pBase10Num,10,2) into tBinary
				   repeat for each char tChar in tBinary
				      if tChar is 0 then put 1 after binNum; else put 0 after binNum
				   end repeat
				   return baseConvert(binNum,2,10) 
				end bugFixedBitNot
				バグ修正を使って10進数「169」をNOT演算(bitNot)する
				bugFixedBitNot(169) -> 86 (結果)
				format("%08s",baseConvert(86,10,2)) -> 01010110 
				bugFixedBitNot(1) -> 0 を返します。
				
				しかし10進数でNOT演算をする意味があるかは、今はここで触れません。
				
				LiveCodeのrepeatを使ったbitNot
				   repeat with i= the num of chars of binary1 down to 1
				         if char i of binary1 is 1 then
				            put 0 before tBit
				         else
				             put 1 before tBit
				         end if
				   end repeat
			
バイナリーの加算(論理演算を使用しない)	
00001010 (binary a)		baseConvert(00001010,2,10) -> 10 (10進数)
00001100 (binary b)		baseConvert(00001100,2,10) -> 12 (10進数)
------------------------
00010110 (a+bの結果)		baseConvert(00010110,2,10) -> 22 (10進数)
00001000(桁上がり)		
桁上がりを除いたa+bの結果は「XOR演算」と同じ	
	1 and 1 -> 0
	0 and 1 -> 1
	1 and 0 -> 1
	0 and 0 -> 0	
				
	10 bitXOr 12 (10進数)-> 110 (2進数)
	format("%08s",baseConvert((10 bitXOr 12),10,2)) -> 00000110
	
桁上がりの箇所は「AND演算」と同じ	
	1 and 1 -> 1
	0 and 1 -> 0
	1 and 0 -> 0
	0 and 0 -> 0
	
	10 bitAnd 12 -> 8(10進数)-> 1000 (2進数)
	format("%08s",baseConvert((10 bitAnd 12),10,2)) -> 00001000