トップページ⇒prog
44コメント11KB

0と1とNULL

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@1周年 NGNG
自分、0と1じゃ足りないと思うんです。
コンピューターは0と1とNULL、この3値をデフォルトにするべきです。
つまり3進数。かなりマジです。
0002sage NGNG
ネタか?
00031 NGNG
>つまり3進数
これ間違いです。つっこまないでね!!
00041 NGNG
>>2
ネタじゃないです。
NULLは、1つの確固たる存在として独立させるべきなんです!!
0005名無しさん@1周年 NGNG
俺は0と1とNULLとTRUEとFALSEをデフォルトにするべきだと思う。
あと、iやloopのようなカウンタはOSが自動的に用意してくれるべきでしょう。
0006名無しさん@1周年 NGNG
そういう論法ちょっと好き > 5
0007名無しさん NGNG
>>1 あなたは
http://www.crt.or.jp/~kokochi/hen_semi.htm
このページの作者様でおられますか?

もし違うならぜひお友達になってもらいなさい。
0008名無しさん@そうだ選挙にいこう NGNG
マジな話、情報工学的にいえば、2ステートか3ステートが
効率がいいらしい。
0009馬鹿厨房 NGNG
4進数になるとコンピューターの効率って16倍になるんだそうな。
だれかこの厨房発言の裏打ち求ム。
0010名無しさん@1周年 NGNG
情報理論的見地から見ると、いちばん効率がイイのはe(自然対数の底)ビットだね。
整数ならば2or3。
まぁこれは速度的な話ではないのですが…

3値論理って昔考えたコトが有るんだけど、けっこう難儀っすよ。
実モデルへの適用が思い浮かびづらいんですね。
2値論理の延長だと、たちまち破綻します (^^;)
各値の否定値をどう取るのか考えてみてください。
理解できそうな(実モデルに適用できそうな)ルールを
ひねり出すと、それはnビットの2値論理だったりします。
0011名無しさん@1周年 NGNG
どうやら俺たちは毒されているようだ…
0012名無しさん@ NGNG
10進数でおねがいします
0013名無しさん@1周年 NGNG
ネタだよネタ!
0014多値論理万歳 NGNG
U@` X@` 0@` 1@` Z@` W@` L@` H@` - の9値論理ぐらいで手をうちませんか?
00151 NGNG
すみません、1で述べたのは少々極論すぎました。
結局突き詰めていけば、0と1と無効値の3値になる(と思った)わけなんですが
そこまでは求めてなくて、これはCの場合なんですが、intやwordなど各型ごとに
NULL値も加えるべきだと思ったんです。
例えば、年齢をあらわすUINT型の変数ageがあったとしましょう。
この変数単体を見た場合、ageが保持している数値が有効な値なのか、無効な
数字の羅列なのか判断する術は無いでしょう。
あと、よくある話ですが、あるポインタがあって
それの保持している値が有効なのか否か、これも現状では判断することは
出来ませんよね。
0016>10 NGNG
旧ソビエト連邦やドイツで、3進法演算を行うコンピュータが
作られていますよ。
0017名無さしんMe NGNG
>>15
何故わざわざCでそんなことする必要が?
無効値は無効値として扱える言語なんていくらでもあるだろうに。
0018名無しさん@1周年 NGNG
ハードウエアは、HighとLowの他の信号状態あったよね。
えーと、なんていうんだっけ?
ハイインピーダンスじゃなくて・・・フローティングじゃなくて・・・
001910>16 NGNG
それは3進演算装置なのでわ?
数値演算なら何進でも問題無いんですけどね。
論理演算(条件式とか)を考えると、アタマ痛いんですよ。

一番わかりやすいのが論理否定。
3値にしちゃうと、0の否定が1、1の否定が2、2の否定が0にするしかないんですね。
0-1@`1-0にしちゃうと2の否定を導入する必要があって
結句4値(2bitの2値)になっちゃうんですよ。
0-1@`1-2@`2-0も「じゃんけん」という身近な例があるのですが
いざ実アプリに使おうとすると、モデル化でアタマをひねることになったんです。(^^;)私の場合
002010 NGNG
3値論理を考るきっかけは、TTLの回路エミュレーションだったのですが
3つめの値として「不定」を考えると…
「不定」と「不定のNOT」の「OR」は「常に真」(^^;)
結局4値になっちゃったんですね。
0021名無しさん@1周年 NGNG
無効値を含む論理演算はすべてエラー扱いにすればいい
0022名無しさん@お胸おっぱい。 NGNG
>>18
はいいんぴーだんす (High-Z) で、よいのでわ?
0023名無しさん@1周年 NGNG
2値より3値の方が情報処理効率が良いと大学の情報処理で習った覚えがあるな。
もう10数年前の話だが(^^
で、やっぱり実装面で2値の方が良いからって話だったようなきがするな。
0024名無しさん@1周年 NGNG
>>22 >>18 それって >>14 だろ
14も悪質だな。HDLしらない人間にわかるとは思えない。
U: 未初期化
X: 強い不定
0: 強い0
1: 強い1
Z: ハイインピーダンス
W: 弱い不定
L: 弱い0
H: 弱い1
-: don't care
だね。

トライステートバッファなんかは0@`1@`Zの3値を使うね。
0025名無しさん@1周年 NGNG
これでどうだ
!0==1 ; !1==0 ; !Z==Z;
0 OR 0 ==0 ; 0 AND 0 ==0;
Z OR 0 ==0 ; Z AND 0 ==0;
0 OR 1 ==1 ; 0 AND 1 ==0;
Z OR 1 ==1 ; Z AND 1 ==1;
1 OR 1 ==1 ; 1 AND 1 ==1;
0026名無しさん@そうだ選挙にいこう NGNG
0 AND 1 ==0;
は、使いにくそうだな‥
0027名無しさん@1周年 NGNG
XORとかも考えてみた。
0 XOR 0 = 0 : 0 EQV 0 = 1 : 0 IMP 0 = 1
Z XOR 0 = 0 : Z EQV 0 = 0 : Z IMP 0 = Z
0 XOR 1 = 1 : 0 EQV 1 = 0 : 0 IMP 1 = 1
Z XOR 1 = 1 : Z EQV 1 = 0 : Z IMP 1 = 1
1 XOR 1 = 0 : 1 EQV 1 = 1 : 1 IMP 1 = 1
0 XOR Z = 0 : 0 EQV Z = 0 : 0 IMP Z = 1
1 XOR Z = 1 : 1 EQV Z = 0 : 1 IMP Z = 0
Z XOR Z = 0 : Z EQV Z = 1 : Z IMP Z = 1

あ、論理等価が排他的論理和の否定になってない。

>>26
はあ?
002825 NGNG
>>25は Z OR Z と Z AND Z を忘れてた。

!(a AND b) == (!a OR !b) を満足させなきゃいけないから
!(Z AND Z)== (Z OR Z) じゃなきゃいけない
だから Z AND Z==0 で Z OR Z==1か
Z AND Z == Z OR Z==Z かどっちかだな
002927 NGNG
ふむ。
排他的論理和=論理等価の否定だから、それをふまえてXORを書き直してみる。
論理等価は>>27で確定でいいと思うけどどうだろう?

0 XOR 0 = 0
0 XOR Z = 1
0 XOR 1 = 1
Z XOR 0 = 1
Z XOR Z = 0
Z XOR 1 = 1
1 XOR 0 = 1
1 XOR Z = 1
1 XOR 1 = 0

論理包含はあれでいいのかな?
0030>29 NGNG
!Z==Zなら感覚的には Z XOR Z==Z がスッキリするけど
003127>30 NGNG
じゃ、論理等価は Z EQV Z = Zかな。
うむ、それはそれで説得力あるかも。
003225 NGNG
とりあえず矛盾が無いかどうかチェックするには
交換則
分配則
ドモルガンの法則
他にあるかな
0033名無しさん@1周年 NGNG
ロジック故障を考慮に入れて、0@` 1@` (不定) の3値を扱うロジックの
設計(当然ハードウェア)の話なら、結構あります。雑誌インターフェース
でも説明記事があった。
0034>33 NGNG
それってロジック故障のためなの?3ステートってのは
ごく基本的な設計だとは思うが
0035名無しさん@1周年 NGNG
どう定義しようがあんまりメリット無いんだから
Zを含む全ての論理演算の結果はZになるとすりゃいいんだよ
Z AND ?=Z ; Z OR ?=Z ; NOT Z=Z;
これでドモルガンも分配則も皆満たす筈
0036rootan NGNG
Oracle 使ってます。
PL/SQL だと BOOLEAN 型には TRUE と FALSE あと NULL の 3 値
がありますね。
変数も初期化していないと確か値は NULL (不定) だったような。
DB オリエンテッドだからなのかな。いまだに不思議です。
0037HG名無しさん NGNG
NULLの場合は初期化されてないから「BOOLEAN型では無い」と解釈
するのがよろしいようで。
0038>34 NGNG
ハイインピーダンスを意味するスリーステートではなく、

0か1かのどちらかが返るけど結果を信頼できない状態。
ってのを定義するんです。
0039>38 NGNG
という事は >>35式の論理なんだろうなあ
0040名無しさん@1周年 NGNG
0と1とNULLにVoidも仲間に入れて下さい(笑)
0041>35 NGNG
Z XOR Zはどうなりますか
0042>41 NGNG
a xor b = ! ( ( a and b ) or (!a and !b) )
Z xor Z = ! ( ( Z and Z ) or (!Z and !Z) )
=!( ( Z and Z ) or ( Z and Z ) )
=!( Z or Z )
=Z
0043名無しさん@1周年 NGNG
>40
voidは値じゃなく型のほうだと思うんだけど。
0044名無しさん@1周年 NGNG
3ステートを機械レベルで語る人と言語レベルで語る人が入り混じっているな(藁)
■ このスレッドは過去ログ倉庫に格納されています