↑
次スレを作る時は上記1行をコピーして2行に増やして必ず1行目に入るようにしてください。
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
※前スレ
C言語なら俺に聞け 149
https://mevius.5ch.net/test/read.cgi/tech/1540731704/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
探検
C言語なら俺に聞け 150
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (アウアウクー MM57-IE4z)
2019/02/06(水) 13:39:03.21ID:c4bnQMl3M409デフォルトの名無しさん (ワッチョイ bfe9-IBRN)
2019/03/01(金) 19:18:18.17ID:HVxvwZsK0 >>394
C の予約語に asm が存在したことがあっても、bool なんて金輪際ございません…
C の予約語に asm が存在したことがあっても、bool なんて金輪際ございません…
410デフォルトの名無しさん (ワッチョイ bfe9-IBRN)
2019/03/01(金) 19:19:07.26ID:HVxvwZsK0 >>408
なんだか misra っていろいろうるさいですね…馬鹿が使うものの典型と理解しました
なんだか misra っていろいろうるさいですね…馬鹿が使うものの典型と理解しました
411デフォルトの名無しさん (ワッチョイ 9f18-W5e4)
2019/03/01(金) 19:20:44.13ID:wVb5PmwP0 >>406
俺もそう思う
俺もそう思う
412デフォルトの名無しさん (ワッチョイ d701-WeXs)
2019/03/01(金) 19:21:00.10ID:corsBm1i0413デフォルトの名無しさん (ブーイモ MM1b-NqO3)
2019/03/01(金) 19:24:31.92ID:WfqePbUuM >>392
Rubyガイジ死ねよ
Rubyガイジ死ねよ
414デフォルトの名無しさん (ワッチョイ 9fda-AU+X)
2019/03/01(金) 19:26:29.24ID:omZ6F1i00 実際の開発現場ではMISRA-Cも_Boolも頭の片隅に意識する(人がいる)程度であまり意味はない
そんなことより他に考えることはいくらでもある
そんなことより他に考えることはいくらでもある
>>411
久々に私の意見に賛成する人がおられましたね…
久々に私の意見に賛成する人がおられましたね…
416383 (ワッチョイ ff2c-Im2K)
2019/03/01(金) 19:56:06.23ID:yZJ4Zkhu0 essentially Boolean (実質的なブール型)
C90にはブール型はないが、真又は偽のブール値を表す式はある。
MISRA-C:2004ではこのような式をブール式と呼んで、数値を表す式と区別しており
if (hoge==TRUE)
このhoge が、実質的にはブール値なら、if (hoge) と書いてもOK
C90にはブール型はないが、真又は偽のブール値を表す式はある。
MISRA-C:2004ではこのような式をブール式と呼んで、数値を表す式と区別しており
if (hoge==TRUE)
このhoge が、実質的にはブール値なら、if (hoge) と書いてもOK
417デフォルトの名無しさん (アウアウクー MM0b-tQZn)
2019/03/01(金) 19:56:10.11ID:f15qqb/AM >>404
そういう例はやめた方がいい。二度、評価することをおかしく感じなくなる。
そういう例はやめた方がいい。二度、評価することをおかしく感じなくなる。
418デフォルトの名無しさん (ワッチョイ bfe9-IBRN)
2019/03/01(金) 19:59:51.05ID:HVxvwZsK0 >>417
マクロ関係ではないから、二度評価問題は関係ないのでは?もう少し詳しく教えていただけますか?
マクロ関係ではないから、二度評価問題は関係ないのでは?もう少し詳しく教えていただけますか?
419383 (ワッチョイ ff2c-Im2K)
2019/03/01(金) 20:02:55.75ID:yZJ4Zkhu0 2値しか取らない、真偽値という概念を作り出して、単純な数値と区別している
明瞭になるように、可読性を高めるために、明確に使い方を分けている
明瞭になるように、可読性を高めるために、明確に使い方を分けている
420デフォルトの名無しさん (アウアウウー Sa9b-RuLt)
2019/03/01(金) 20:09:43.22ID:ber2ILYja みそら・・・
421383 (ワッチョイ ff2c-Im2K)
2019/03/01(金) 20:13:59.03ID:yZJ4Zkhu0 essentially Boolean (実質的なブール型)
hoge が単純な数値なら、if (hoge) とは書けないので、
比較演算子などを使って、( )内を真偽値にしなければならないが、
hoge を2値しか取らず、実質的には真偽値として扱っているなら、そう書いてもよい
hoge が単純な数値なら、if (hoge) とは書けないので、
比較演算子などを使って、( )内を真偽値にしなければならないが、
hoge を2値しか取らず、実質的には真偽値として扱っているなら、そう書いてもよい
422デフォルトの名無しさん (ワッチョイ 37b3-tPEd)
2019/03/01(金) 20:17:31.73ID:zSE4SpXO0 >>19
なに時代だよ、trueとfalseだろ
なに時代だよ、trueとfalseだろ
423デフォルトの名無しさん (ワッチョイ 37b3-tPEd)
2019/03/01(金) 20:18:43.90ID:zSE4SpXO0424デフォルトの名無しさん (ワッチョイ 37b3-tPEd)
2019/03/01(金) 20:20:05.53ID:zSE4SpXO0 >>382
というよりtrueとfalseを使えよ
というよりtrueとfalseを使えよ
425デフォルトの名無しさん (ワッチョイ 37b3-tPEd)
2019/03/01(金) 20:21:09.40ID:zSE4SpXO0 >>385
bool だよ
bool だよ
426デフォルトの名無しさん (スプッッ Sdbf-x13U)
2019/03/01(金) 20:59:57.85ID:YTopxKYTd >>424
?
?
427デフォルトの名無しさん (ワッチョイ d701-nvQ/)
2019/03/01(金) 21:08:03.60ID:xM2kasch0 C++か他の言語か勘違いしてないかな?
C言語の枠内では(以下略
C言語の枠内では(以下略
428さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ d701-tIeT)
2019/03/01(金) 21:13:58.29ID:V2sWjbOV0 #include <stdbool.h>すれば、C言語でもbool, false, trueが使える。C99から。
429デフォルトの名無しさん (ワッチョイ d701-nvQ/)
2019/03/01(金) 21:27:08.50ID:xM2kasch0 マクロなのか 乱暴な解決法と見るか予約語にしなかった・できなかった理由があったのだろうか
430デフォルトの名無しさん (ワッチョイ bfe9-IBRN)
2019/03/01(金) 22:01:55.94ID:HVxvwZsK0 >>428
bool 型は C99 では _Bool 型となり「bool」そのままではありません
bool 型は C99 では _Bool 型となり「bool」そのままではありません
431デフォルトの名無しさん (ワッチョイ 9f18-W5e4)
2019/03/01(金) 22:19:15.38ID:wVb5PmwP0432デフォルトの名無しさん (アウアウウー Sa9b-n14O)
2019/03/01(金) 22:36:40.53ID:4P/9ohSca >>413
口調が似てると思ったら、やっぱりあいつだったのね
口調が似てると思ったら、やっぱりあいつだったのね
433デフォルトの名無しさん (ワッチョイ 9ff9-IBRN)
2019/03/02(土) 00:57:50.68ID:SIJCHEbM0 >>418
if ((n / 10 != 0) != 0) とは書かないのですか?
if (((n / 10 != 0) != 0) != 0) とは書かないのですか?
if (n / 10) で充分だろ
if ((n / 10 != 0) != 0) とは書かないのですか?
if (((n / 10 != 0) != 0) != 0) とは書かないのですか?
if (n / 10) で充分だろ
434デフォルトの名無しさん (ワッチョイ b75f-tQZn)
2019/03/02(土) 01:28:32.24ID:ixsZHls30 if文の仕様がまずかったんだよな。演算子がコマンドで数値を返すところがいまとなってはわかりにくい。
435はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf3e-3oSp)
2019/03/02(土) 02:00:30.74ID:tMatklv80 C の _Bool は完全に後付けだし、
true, false の型は int (整数リテラルの 1 や 0 に展開されるマクロ) ってのも
C らしい歴史的経緯ってやつだよねぇ……。
true, false の型は int (整数リテラルの 1 や 0 に展開されるマクロ) ってのも
C らしい歴史的経緯ってやつだよねぇ……。
436デフォルトの名無しさん (ワッチョイ 9f7c-WzxR)
2019/03/02(土) 02:41:15.96ID:LTb7iLna0 なんでもいいがboolは使った方がいいよ
キャストするとちゃんと0と1になるよ
キャストするとちゃんと0と1になるよ
437デフォルトの名無しさん (ワッチョイ b75f-tQZn)
2019/03/02(土) 03:06:19.06ID:ixsZHls30 キャストしないといけないのか
438デフォルトの名無しさん (ワッチョイ 9701-W5e4)
2019/03/02(土) 04:52:10.38ID:x2TrvqAV0 #define TRUE (1==1)
#define FALSE (!TRUE)
昔はこう書いて使ってたっけなあ
#define FALSE (!TRUE)
昔はこう書いて使ってたっけなあ
439デフォルトの名無しさん (ワッチョイ 9fda-W5e4)
2019/03/02(土) 06:31:18.66ID:uyGBCzAL0 _Bool型(stdbool.hインクルード時はboolも可)の値は0か1しか取り得ないのでわざわざキャストする必要は無い
しかしながら自分はC言語では普段は_Boolもboolもどちらも使わない
単純にintなどの数値型を0か非0かだけで判断して使ってる
尤もC++ではbool型は普通に使っているけど
https://i.imgur.com/47mIrVh.png
しかしながら自分はC言語では普段は_Boolもboolもどちらも使わない
単純にintなどの数値型を0か非0かだけで判断して使ってる
尤もC++ではbool型は普通に使っているけど
https://i.imgur.com/47mIrVh.png
440デフォルトの名無しさん (ワッチョイ d77b-vPGa)
2019/03/02(土) 06:54:46.28ID:uz1yhwTy0 >>376 を見て、久し振りに『プログラミング言語C』を開いてみたところ、
確かに p.105 に printd() って関数が載ってる(第2版)。
ここのテーマは再帰なので printd() は「1文字出力 putchar() を使って、
整数値を10進数で表示する再帰関数」の例。
話題の if (n / 10) では「n が 10 以上か」を判定してる。
直前で符号の処理をしてるので n が負ではないことは保証される。
(さらに「だだし n == INT_MIN の場合は…」に相当する注記あり)
で if (n / 10) が if ((n / 10) != 0) の意味だってことは、
p.68 第3章 制御の流れ 3.2 If-Else でさらりと説明されてるし、
その前 p.63 の条件式(三項演算子)の部分なんかにも載ってる。
たぶん他にも、あちこちで出てるんだろう。
「真と偽」みたいな独立した項目を立てた方が良かったんじゃないかな。
そうすりゃ索引からも探せるようになるし。
ついでに言えば、この場面では if (n / 10) より if (n >= 10) の方が
やってることが明解だし、処理も軽い気がするなぁ。
確かに p.105 に printd() って関数が載ってる(第2版)。
ここのテーマは再帰なので printd() は「1文字出力 putchar() を使って、
整数値を10進数で表示する再帰関数」の例。
話題の if (n / 10) では「n が 10 以上か」を判定してる。
直前で符号の処理をしてるので n が負ではないことは保証される。
(さらに「だだし n == INT_MIN の場合は…」に相当する注記あり)
で if (n / 10) が if ((n / 10) != 0) の意味だってことは、
p.68 第3章 制御の流れ 3.2 If-Else でさらりと説明されてるし、
その前 p.63 の条件式(三項演算子)の部分なんかにも載ってる。
たぶん他にも、あちこちで出てるんだろう。
「真と偽」みたいな独立した項目を立てた方が良かったんじゃないかな。
そうすりゃ索引からも探せるようになるし。
ついでに言えば、この場面では if (n / 10) より if (n >= 10) の方が
やってることが明解だし、処理も軽い気がするなぁ。
441デフォルトの名無しさん (ワッチョイ 9fda-W5e4)
2019/03/02(土) 07:05:29.88ID:uyGBCzAL0 単純に開発当時のC言語としては処理をシンプルにしてパフォーマンスを稼ぎたかったのだと思うよ
普通のCPUは0か0でないかの判断は得意だけど0か1の判断は手間が掛かる
少しでもパフォーマンスを稼ぎたい場合(現在では組込み用途など)では余計な処理は極力除くように工夫する
普通のCPUは0か0でないかの判断は得意だけど0か1の判断は手間が掛かる
少しでもパフォーマンスを稼ぎたい場合(現在では組込み用途など)では余計な処理は極力除くように工夫する
442デフォルトの名無しさん (ワッチョイ 9f18-W5e4)
2019/03/02(土) 07:30:56.47ID:0NQezXSh0443デフォルトの名無しさん (ワッチョイ ffd2-IBRN)
2019/03/02(土) 07:57:45.28ID:THGEifYn0 CPU/ハード毎に違い出るだろ。
444デフォルトの名無しさん (ワッチョイ d77b-vPGa)
2019/03/02(土) 08:01:55.04ID:uz1yhwTy0 いや、さすがに単純な整数値の大小比較と、割り算とで
どちらが速いか実測しなくちゃ分からないってのは
「実測しろ」って原則を無批判に(条件反射的に)
振りかざしてるんじゃないの?
予測は一切禁止ってルールじゃないでしょ。
どちらが速いか実測しなくちゃ分からないってのは
「実測しろ」って原則を無批判に(条件反射的に)
振りかざしてるんじゃないの?
予測は一切禁止ってルールじゃないでしょ。
445デフォルトの名無しさん (ドコグロ MMdb-dMaL)
2019/03/02(土) 09:30:10.68ID:+HGsrEwZM446デフォルトの名無しさん (ワッチョイ 9f01-dMaL)
2019/03/02(土) 09:37:08.49ID:Co1I1oSR0447デフォルトの名無しさん (アウアウウー Sa9b-mjQG)
2019/03/02(土) 10:48:59.21ID:op59Vyc6a でもcのコンパイラって割り算の時は最初に比較があって、n < 10なら比較直後に0返すんじゃなかったかな。
昔アセンブラの実習でやった気がする。
帰ったらみてみよ。
昔アセンブラの実習でやった気がする。
帰ったらみてみよ。
448デフォルトの名無しさん (ワッチョイ 9701-W5e4)
2019/03/02(土) 10:57:46.09ID:x2TrvqAV0 n / 10 と (n / 10) != 0 とで違うコード吐くとか?
オプティマイザなめんなよ
オプティマイザなめんなよ
449デフォルトの名無しさん (ワッチョイ 9fa5-JAd8)
2019/03/02(土) 11:32:55.24ID:TCm6U75d0450デフォルトの名無しさん (ワッチョイ d7f2-W5e4)
2019/03/02(土) 11:41:06.22ID:x3fQB5qB0 唯一ってw
451デフォルトの名無しさん (ワッチョイ f777-6Vjj)
2019/03/02(土) 13:58:43.76ID:S/SxCgBS0 MSゴシック以外のとこはアンチエイリアスかかってるだろ
452デフォルトの名無しさん (ワッチョイ b75f-tQZn)
2019/03/02(土) 16:14:23.72ID:ixsZHls30 >>447
割り算はコンピュータにとって簡単なことではない。人間だってそうだろ。
割り算はコンピュータにとって簡単なことではない。人間だってそうだろ。
453デフォルトの名無しさん (ワッチョイ 175f-5O6o)
2019/03/02(土) 16:42:33.79ID:/q2pZC1F0454デフォルトの名無しさん (ワッチョイ 175f-5O6o)
2019/03/02(土) 16:43:44.00ID:/q2pZC1F0 >>453
自己レス、型はintって書いてあったわ
自己レス、型はintって書いてあったわ
455はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf3e-3oSp)
2019/03/02(土) 17:04:52.74ID:tMatklv80 C では比較演算子が返すのも、 if の判定にも真偽値型は現れない。
真偽値型は後付けで、言語の中核の意味論には関与しない。
真偽値型は整数型の一種だから何か演算しようとすると整数拡張で int になってから計算するしな。
_Bool で表現してもほとんどの場合にコメントと同程度にしか意味ない。
コメントと同程度に「意図」を表せるならそれはそれで有用ではあるけど、
型システムが間違いを防止する役に立つ場面はあんまりない。
(余談だが C++ では (組込みの) 比較演算子は真偽値型を返すし、
if の条件節は真偽値型にキャストして判定するので C とは解釈が違う)
真偽値型は後付けで、言語の中核の意味論には関与しない。
真偽値型は整数型の一種だから何か演算しようとすると整数拡張で int になってから計算するしな。
_Bool で表現してもほとんどの場合にコメントと同程度にしか意味ない。
コメントと同程度に「意図」を表せるならそれはそれで有用ではあるけど、
型システムが間違いを防止する役に立つ場面はあんまりない。
(余談だが C++ では (組込みの) 比較演算子は真偽値型を返すし、
if の条件節は真偽値型にキャストして判定するので C とは解釈が違う)
456デフォルトの名無しさん (ドコグロ MMdb-dMaL)
2019/03/02(土) 17:20:40.95ID:vTA45/dSM457デフォルトの名無しさん (ワッチョイ ff63-3oSp)
2019/03/02(土) 17:23:51.58ID:U++dipsO0 若さを売りにするしか無くなったかw
458デフォルトの名無しさん (ワッチョイ 9fab-IBRN)
2019/03/02(土) 17:29:25.11ID:Dgo9YwRe0 >>456
「昭和」言いたかっただけだろがw
「昭和」言いたかっただけだろがw
459デフォルトの名無しさん (ワッチョイ 175f-5O6o)
2019/03/02(土) 17:38:17.44ID:/q2pZC1F0 >>456
「型は同じ」って言っただけで区別不要とはどこにも書いてない訳だが
「型は同じ」って言っただけで区別不要とはどこにも書いてない訳だが
460デフォルトの名無しさん (ドコグロ MMdb-dMaL)
2019/03/02(土) 17:53:06.93ID:vTA45/dSM いや、マジで型安全とか知らなさそうで可哀想ですらあるんだが…
461デフォルトの名無しさん (ドコグロ MMdb-dMaL)
2019/03/02(土) 17:55:42.96ID:vTA45/dSM462デフォルトの名無しさん (ワッチョイ 175f-5O6o)
2019/03/02(土) 18:05:39.73ID:/q2pZC1F0463デフォルトの名無しさん (ワッチョイ ff63-3oSp)
2019/03/02(土) 18:07:30.88ID:U++dipsO0 「ばあさん、いただきものは型を意識した応答だろう」
「いいえ、お爺さん型を意識した応答でしたよ」
「そうかい、わしゃまた型を意識した応答だと思ったよ」
「いいえ、お爺さん型を意識した応答でしたよ」
「そうかい、わしゃまた型を意識した応答だと思ったよ」
464デフォルトの名無しさん (アウアウウー Sa9b-WzxR)
2019/03/02(土) 18:18:58.15ID:5yoALKCSa boolの1と1足したら1になるよね?
465デフォルトの名無しさん (ブーイモ MMbf-NqO3)
2019/03/02(土) 18:45:34.07ID:NrjYyiWtM >>464
ならんよ
ならんよ
466はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf3e-3oSp)
2019/03/02(土) 18:46:41.44ID:tMatklv80 >>464
双方が int に拡張されて足し算されて 2 になったのが
再び bool にキャストすると 1 になる。
演算子の両方の型が int より小さい場合には
両方が int に拡張されてから計算されるというのが
C の基本的なルール。
(全ての演算子がそうというわけではない。)
双方が int に拡張されて足し算されて 2 になったのが
再び bool にキャストすると 1 になる。
演算子の両方の型が int より小さい場合には
両方が int に拡張されてから計算されるというのが
C の基本的なルール。
(全ての演算子がそうというわけではない。)
467383 (ワッチョイ ff2c-Im2K)
2019/03/02(土) 19:01:27.14ID:Gk4CLPf80 >>455
MISRA-C は、C89/90に、bool という概念をバックポートした。
それを「実質的なブール型」と呼んで、単純な整数型と区別している
ブールを表現する場合は、整数型を使っていても、
それはブール型ですよってアピールする事で、
技術者間での意思疎通を図り、安全性を高める
MISRA-C は、C89/90に、bool という概念をバックポートした。
それを「実質的なブール型」と呼んで、単純な整数型と区別している
ブールを表現する場合は、整数型を使っていても、
それはブール型ですよってアピールする事で、
技術者間での意思疎通を図り、安全性を高める
468さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdbf-tIeT)
2019/03/02(土) 19:16:00.81ID:eb7NT9g3d469デフォルトの名無しさん (アウアウウー Sa9b-WzxR)
2019/03/02(土) 19:16:54.91ID:5yoALKCSa あれ、ぶーる同士足し算できないの?
ちょっと信じがたい気はするけど
ちょっと信じがたい気はするけど
470デフォルトの名無しさん (ワッチョイ ffaa-Pjzk)
2019/03/02(土) 19:29:15.37ID:sCjKfj9s0 1bit計算のインストラクションなんぞ
わざわざ作らないだろ
そもそもbool型ってなんだよ
気持ち悪いな
わざわざ作らないだろ
そもそもbool型ってなんだよ
気持ち悪いな
471デフォルトの名無しさん (スププ Sdbf-5O6o)
2019/03/02(土) 19:31:09.19ID:DKrIFalvd 要は
bool a = 1;
bool b = 1;
として、
bool c = a + b;
ができたとしても、内部的には
bool c = (_Bool)(((int)a) + ((int)b));
になるってことじゃないの
bool a = 1;
bool b = 1;
として、
bool c = a + b;
ができたとしても、内部的には
bool c = (_Bool)(((int)a) + ((int)b));
になるってことじゃないの
472383 (ワッチョイ ff2c-Im2K)
2019/03/02(土) 19:43:06.08ID:Gk4CLPf80 整数型には加算はあるけど、
ブール型として扱うなら、加算は存在しない
AND, OR, NOT だけしかない
だから技術者間での、こういう共通意識が大切なわけ。
これは「実質的なブール型」として扱っているから、整数型の演算はできません!
ブール型が無かった時代の、
技術者間での意思疎通を図り、安全性を高める、苦肉の策
ブール型として扱うなら、加算は存在しない
AND, OR, NOT だけしかない
だから技術者間での、こういう共通意識が大切なわけ。
これは「実質的なブール型」として扱っているから、整数型の演算はできません!
ブール型が無かった時代の、
技術者間での意思疎通を図り、安全性を高める、苦肉の策
473さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdbf-tIeT)
2019/03/02(土) 19:48:16.19ID:vmi2lFb5d bool a = true, b = true;
int c = a + b;
これは2
int c = a + b;
これは2
>>467
>それはブール型ですよってアピールする事で、技術者間での意思疎通を図り
そういうのは、わりきってハンガリアンを使う方がいいのでは?
bool を使うことで文法的縛りが導入されないことには意味がない気がします
>それはブール型ですよってアピールする事で、技術者間での意思疎通を図り
そういうのは、わりきってハンガリアンを使う方がいいのでは?
bool を使うことで文法的縛りが導入されないことには意味がない気がします
475デフォルトの名無しさん (ワッチョイ 175f-5O6o)
2019/03/02(土) 20:00:32.34ID:/q2pZC1F0 仕様の話とコーティング規約とか作法の話が混ざってるからややこしくなってるのでは
476デフォルトの名無しさん (ワッチョイ 9fda-W5e4)
2019/03/02(土) 20:02:44.72ID:uyGBCzAL0 MSVCではbool変数同士の論理和でも加算でも再評価されて0か1のいずれかが再設定されてる
内部処理は全く同じ
gccの内部処理は分からんけど
https://i.imgur.com/3EzADoO.png
内部処理は全く同じ
gccの内部処理は分からんけど
https://i.imgur.com/3EzADoO.png
477はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf3e-3oSp)
2019/03/02(土) 20:47:30.41ID:tMatklv80478デフォルトの名無しさん (ブーイモ MMcf-NqO3)
2019/03/02(土) 21:01:54.09ID:0outH6mLM479デフォルトの名無しさん (アウアウウー Sa9b-WzxR)
2019/03/02(土) 22:47:35.40ID:WsmBPiyqa 最後に評価されるタイミングで一致してりゃなんでもいいんだけどね
+って相当するのはxorだかorだかわからんという問題もあるね
+って相当するのはxorだかorだかわからんという問題もあるね
480デフォルトの名無しさん (ワッチョイ 9f01-dMaL)
2019/03/03(日) 06:55:31.52ID:EUJr/Yte0 >>479
> 最後に評価されるタイミングで一致してりゃなんでもいいんだけどね
とか言うなら内部処理ガーとか言うなよ
って話だろ
> +って相当するのはxorだかorだかわからんという問題もあるね
orはわかるがxorになることなんてあるのか?
> 最後に評価されるタイミングで一致してりゃなんでもいいんだけどね
とか言うなら内部処理ガーとか言うなよ
って話だろ
> +って相当するのはxorだかorだかわからんという問題もあるね
orはわかるがxorになることなんてあるのか?
481デフォルトの名無しさん (ワッチョイ 9fda-W5e4)
2019/03/03(日) 07:58:48.98ID:ojZ/TgF60 ついでにいくつか検証
xorは排他なので当然true同士はfalseに反転する
2項演算や0/1以外の値の代入(boolの範囲外の値であっても)は内部処理は共通
単項演算のインクリメントやデクリメントはコンパイル時に1か0を割り当てるため別の処理らしい
https://i.imgur.com/STxUA6o.png
xorは排他なので当然true同士はfalseに反転する
2項演算や0/1以外の値の代入(boolの範囲外の値であっても)は内部処理は共通
単項演算のインクリメントやデクリメントはコンパイル時に1か0を割り当てるため別の処理らしい
https://i.imgur.com/STxUA6o.png
482デフォルトの名無しさん (ワッチョイ d77b-vPGa)
2019/03/03(日) 08:25:42.12ID:HIAqsaOR0 ブール値は 0/1 しかとらないから1ビットの整数値、と解釈して
true + true == 1 + 1 == (2進数で)10 → 下位1ビットを採用して結果は 0
よってブール値での加算はビットでの排他的論理和と同等、
という考え方もあるんだわ。
「無符号整数のオーバーフローの方式を1ビット幅まで狭める方向に推し進める」
とでも言おうか。
true + true == 1 + 1 == (2進数で)10 → 下位1ビットを採用して結果は 0
よってブール値での加算はビットでの排他的論理和と同等、
という考え方もあるんだわ。
「無符号整数のオーバーフローの方式を1ビット幅まで狭める方向に推し進める」
とでも言おうか。
483デフォルトの名無しさん (ワッチョイ 9fda-W5e4)
2019/03/03(日) 08:41:37.16ID:ojZ/TgF60 基本的なハーフアダー演算器の考え方だね
キャリーを出力してビットを反転させる
多ビット加算の基本構成
いくら高級アセンブラとしてのC言語であってもキャリーを抽象化した演算を実装するのは結構面倒だけど
多バイト加算はそれなりに手間が掛かる
キャリーを出力してビットを反転させる
多ビット加算の基本構成
いくら高級アセンブラとしてのC言語であってもキャリーを抽象化した演算を実装するのは結構面倒だけど
多バイト加算はそれなりに手間が掛かる
484デフォルトの名無しさん (ワッチョイ d7f2-W5e4)
2019/03/03(日) 08:57:40.87ID:oO/57lY20 仕様を小さくするため論理演算をビット演算で代用する言語はあったと思うが、
わざわざ下1bitだけで真偽を表すってのは見たことないなぁ。
わざわざ下1bitだけで真偽を表すってのは見たことないなぁ。
485デフォルトの名無しさん (ワッチョイ 9f01-dMaL)
2019/03/03(日) 10:00:14.37ID:EUJr/Yte0 >>482
> よってブール値での加算はビットでの排他的論理和と同等、
> という考え方もあるんだわ。
そんなの聞いたことないw
お前のオレオレ理論じゃないと言うならその考え方を示してる例を出してくれ
> よってブール値での加算はビットでの排他的論理和と同等、
> という考え方もあるんだわ。
そんなの聞いたことないw
お前のオレオレ理論じゃないと言うならその考え方を示してる例を出してくれ
486482 (ワッチョイ d77b-vPGa)
2019/03/03(日) 10:41:34.05ID:HIAqsaOR0487デフォルトの名無しさん (スププ Sdbf-5O6o)
2019/03/03(日) 10:46:47.10ID:3MaRmCtMd 少なくともC言語である限りは規格に反するんじゃ?
_Bool型は0に等しければ0、その他は1って明記されてる(C11の6.3.1.2)から2進数で10は0に等しくないように思うが
_Bool型は0に等しければ0、その他は1って明記されてる(C11の6.3.1.2)から2進数で10は0に等しくないように思うが
488デフォルトの名無しさん (ワッチョイ 9f01-dMaL)
2019/03/03(日) 11:22:47.67ID:EUJr/Yte0 >>486
ハーフアダーはキャリーとセットで話すべきものだからハーフアダー云々は頓珍漢過ぎる
ハーフアダーはキャリーとセットで話すべきものだからハーフアダー云々は頓珍漢過ぎる
489デフォルトの名無しさん (ワッチョイ d77b-vPGa)
2019/03/03(日) 11:25:33.68ID:HIAqsaOR0 Cの、ビット幅の狭い整数値は int に変換してから計算するってルールにより
true + true → (int)1 + (int)1 == (int)2 → true
という流れで true + true == true であることは納得してるんだ。
型が _Bool でも適用されるよね。勘違いなら訂正求む。
(今回の話とは直接関係ないけど、まるっきり無関係でもない余談)
ただ、これが例えば unsigned int の値を真偽値として扱う場合だと、
unsigned int a = UINT_MAX; // 真偽値としては真
unsigned int b = 1; // 真偽値としては真
a + b == UINT_MAX + 1 == (オーバーフローして)0 → 真偽値では偽!
という事態も起こりうるのでご注意。
true + true → (int)1 + (int)1 == (int)2 → true
という流れで true + true == true であることは納得してるんだ。
型が _Bool でも適用されるよね。勘違いなら訂正求む。
(今回の話とは直接関係ないけど、まるっきり無関係でもない余談)
ただ、これが例えば unsigned int の値を真偽値として扱う場合だと、
unsigned int a = UINT_MAX; // 真偽値としては真
unsigned int b = 1; // 真偽値としては真
a + b == UINT_MAX + 1 == (オーバーフローして)0 → 真偽値では偽!
という事態も起こりうるのでご注意。
490デフォルトの名無しさん (アウアウカー Sa6b-WzxR)
2019/03/03(日) 11:31:58.04ID:f6/fijs9a 加算てのは常に状態を変える操作なので、論理演算としてはXORの方が似てるんですよ。
もちろん単に似てるという話で、加算は禁止するくらいが正しいといえば正しい。trueとfalseを1と0に割り当てたせいで足し算できそうな気になってしまったのがよくない。
1ビット整数だと考えてもいいが、元々そんなもんないからsizeofも1以上にするしかないという。
構造体に入れたらビットフィールドと同じメモリのレイアウトになるんだろうか。実装としては。
もちろん単に似てるという話で、加算は禁止するくらいが正しいといえば正しい。trueとfalseを1と0に割り当てたせいで足し算できそうな気になってしまったのがよくない。
1ビット整数だと考えてもいいが、元々そんなもんないからsizeofも1以上にするしかないという。
構造体に入れたらビットフィールドと同じメモリのレイアウトになるんだろうか。実装としては。
491デフォルトの名無しさん (ワッチョイ 9fda-W5e4)
2019/03/03(日) 11:46:05.73ID:ojZ/TgF60 C言語の_Bool型(boolはただの別名)のtrueを1以外に割り当てるとC++との互換に問題が生じる
C++のbool型のtrueの内部表現は1
bool(論理型)をcharやintなど(整数型)にcastすると1が返される
C++では論理型同士での四則演算は不可能なので問題は生じないが論理型の存在しないC言語ではどうしようもない
trueを1に割り当てて妥協するしか無いと思う
C++のbool型のtrueの内部表現は1
bool(論理型)をcharやintなど(整数型)にcastすると1が返される
C++では論理型同士での四則演算は不可能なので問題は生じないが論理型の存在しないC言語ではどうしようもない
trueを1に割り当てて妥協するしか無いと思う
492デフォルトの名無しさん (ワッチョイ 9f2f-W5e4)
2019/03/03(日) 20:59:55.81ID:7VSfwDmM0 >>444
おまえ除算器作ったことあるの?
おまえ除算器作ったことあるの?
>>444
>「実測しろ」って原則を無批判に(条件反射的に)振りかざしてるんじゃないの?
いいところを突きますね、そうそうその調子、いい感じですよ
百人一首の上の句と下の句をつなげる、みたいな思考力を使わない、言葉のオートマタを批判するのはすばらしい着目です、感心しました
>「実測しろ」って原則を無批判に(条件反射的に)振りかざしてるんじゃないの?
いいところを突きますね、そうそうその調子、いい感じですよ
百人一首の上の句と下の句をつなげる、みたいな思考力を使わない、言葉のオートマタを批判するのはすばらしい着目です、感心しました
>>492
作ったことはあります、最初 C でちょろちょろっと書いたのが、いつのまにか成長してまとまったものになりました、まだまだ改善は必要ですが
https://mevius.5ch.net/test/read.cgi/tech/1434079972/51
作ったことはあります、最初 C でちょろちょろっと書いたのが、いつのまにか成長してまとまったものになりました、まだまだ改善は必要ですが
https://mevius.5ch.net/test/read.cgi/tech/1434079972/51
495デフォルトの名無しさん (ワッチョイ 9f2f-W5e4)
2019/03/04(月) 06:25:09.82ID:kNFhD2SD0496デフォルトの名無しさん (ワッチョイ 9fda-W5e4)
2019/03/04(月) 07:32:41.06ID:yZdj1rJq0 昔8bitマイコンの組込みシステム開発で、被除数が24bit長、除数が固定値(値は3)の除算処理が必要となったとき、
C言語の除算処理では実行時間が要求仕様を満足しなかったのでインラインアセンブラで書き下ろしたことがある
処理系そのものは16bit長までしか対応してなかったので、32bit長の汎用演算ライブラリ関数が付属してたのはいいけど
そのライブラリが遅くて使い物にならなかった
C言語の除算処理では実行時間が要求仕様を満足しなかったのでインラインアセンブラで書き下ろしたことがある
処理系そのものは16bit長までしか対応してなかったので、32bit長の汎用演算ライブラリ関数が付属してたのはいいけど
そのライブラリが遅くて使い物にならなかった
497デフォルトの名無しさん (アウアウウー Sa9b-mjQG)
2019/03/04(月) 09:27:34.36ID:uCsPZ+haa 昔bool型ってのを初めてみたときは、誰が使うんだよ気持ちわりーって思ったな。charで8個もフラグ取れるし、
flg & 04とかで好きな位置のビット取れるし、なんでわざわざtrue,falseと思ったもんだ。
flg & 04とかで好きな位置のビット取れるし、なんでわざわざtrue,falseと思ったもんだ。
498デフォルトの名無しさん (ワッチョイ 9fa5-JAd8)
2019/03/04(月) 09:33:39.42ID:7yhUbPfx0 貧民の発想だな
499デフォルトの名無しさん (ドコグロ MMcb-dMaL)
2019/03/04(月) 12:25:39.90ID:LMssFTDPM 貧民てか脳がアセンブラに侵されてる
Pascalから入った俺はintでBooleanの代用とかサボりすぎだろって思ったわ
Pascalから入った俺はintでBooleanの代用とかサボりすぎだろって思ったわ
500デフォルトの名無しさん (ワッチョイ 9f2f-W5e4)
2019/03/04(月) 15:44:36.25ID:kNFhD2SD0 当初から予想された抵抗だ
Pascal教に対する宗教改革じゃけえの
Pascal教に対する宗教改革じゃけえの
501デフォルトの名無しさん (ワッチョイ bf02-wVf3)
2019/03/04(月) 16:53:38.87ID:TpCWsYE80 >>497
思い切り最適化されて最終的なコードがそうなれば誰も文句言わないんだろうけどな。
思い切り最適化されて最終的なコードがそうなれば誰も文句言わないんだろうけどな。
502はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf3e-3oSp)
2019/03/04(月) 17:08:34.72ID:Cw9L4ZBc0 bool は真偽値を格納するのに充分であればいいんだから普通は 1 バイトだろっていうのも昔の話で、
今の主要な処理系はだいたい int と同じ幅だったりしてあんまりリソースの節約にもならんかったりするし。
今の主要な処理系はだいたい int と同じ幅だったりしてあんまりリソースの節約にもならんかったりするし。
503デフォルトの名無しさん (ワッチョイ d77b-vPGa)
2019/03/04(月) 17:13:39.42ID:7Cz1/mIW0 ブール値の変数を1ビットで表現して1バイトに8個押し込めば
容量の節約にはなるだろうけど、速度的には損な気がするな。
(これも「実測しなけりゃ何も分からない人」向けの釣り餌かも)
ブール値をバイトなりワードで記憶すれば、CPUによっては
レジスタにロードした時点でゼロフラグに反映されて
ゼロとの比較やマスク演算が不要という利点を得られる場合もある。
容量の節約にはなるだろうけど、速度的には損な気がするな。
(これも「実測しなけりゃ何も分からない人」向けの釣り餌かも)
ブール値をバイトなりワードで記憶すれば、CPUによっては
レジスタにロードした時点でゼロフラグに反映されて
ゼロとの比較やマスク演算が不要という利点を得られる場合もある。
504デフォルトの名無しさん (ワッチョイ bf02-wVf3)
2019/03/04(月) 17:16:40.19ID:TpCWsYE80 >>503
CPUしだいだろうね。レジスタに入れないで0かどうかだけ調べる命令があったらそれの方が速いかも知れんし。
CPUしだいだろうね。レジスタに入れないで0かどうかだけ調べる命令があったらそれの方が速いかも知れんし。
505デフォルトの名無しさん (ワッチョイ 9f2f-W5e4)
2019/03/04(月) 17:18:44.97ID:kNFhD2SD0 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|CPUしだいだろうね。レジスタに入れないで0かどうかだけ調べる命令があったらそれの方が速いかも知れんし
\___________ _______
V
/ ̄ ̄ ̄ ̄ ̄ ミ / ̄ ̄ ̄ \
/ ,――――-ミ / |
/ / / \ | ∨∨∨∨∨\ |
| / ,(・) (・) | |▲ ▲ ||
(6 つ | |(・) (・) 6)
| ___ | | | ||
| /__/ / | ¨ /
/| /\ \/\ /\
/ ̄ ̄ ̄ \
∧
/ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| なわけねーだろ!!
\__________________
|CPUしだいだろうね。レジスタに入れないで0かどうかだけ調べる命令があったらそれの方が速いかも知れんし
\___________ _______
V
/ ̄ ̄ ̄ ̄ ̄ ミ / ̄ ̄ ̄ \
/ ,――――-ミ / |
/ / / \ | ∨∨∨∨∨\ |
| / ,(・) (・) | |▲ ▲ ||
(6 つ | |(・) (・) 6)
| ___ | | | ||
| /__/ / | ¨ /
/| /\ \/\ /\
/ ̄ ̄ ̄ \
∧
/ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| なわけねーだろ!!
\__________________
506はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf3e-3oSp)
2019/03/04(月) 17:21:36.33ID:Cw9L4ZBc0 真偽値の超巨大な配列が必要な場合ならともかく、
今の時代なら 1MB が 8MB になったくらいならたいした差ではないしな。
ただ、キャッシュにのるかどうかで劇的な差になったりもするから、
そこらへんは状況によるというか、それこそ実測しなきゃわからん。
今の時代なら 1MB が 8MB になったくらいならたいした差ではないしな。
ただ、キャッシュにのるかどうかで劇的な差になったりもするから、
そこらへんは状況によるというか、それこそ実測しなきゃわからん。
507デフォルトの名無しさん (ワッチョイ 17de-Pjzk)
2019/03/04(月) 17:42:05.47ID:VsmIFGpH0 >503
ロードストアに比べて
ALUの制約は少ない
だから詰めたほうがいいとなる
スペックシート読めずに
実測して速い遅い語ってる人は
遅くなると断言しよう
ロードストアに比べて
ALUの制約は少ない
だから詰めたほうがいいとなる
スペックシート読めずに
実測して速い遅い語ってる人は
遅くなると断言しよう
508デフォルトの名無しさん (アウアウカー Sa6b-WzxR)
2019/03/04(月) 18:01:28.91ID:jkGA6AVca プリミティブな静的変数のビットフィールドにアクセスするときってロック意味あると思う?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★6 [ぐれ★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 【音楽】BARBEE BOYS・KONTAが事故で四肢麻痺を公表、新体制で活動は継続 [少考さん★]
- 中国「捜索レーダー起動は各国の通常の手法」 火器管制用か回答せず [蚤の市★]
- 【野球】野球の未来に危機感「マイナースポーツになる」 宮本慎也氏が開催…学童大会 [尺アジ★]
- 【訃報】声優・西村知道さん死去 「SLAM DUNK」安西先生役 9月に体調不良のため一時休業 [少考さん★]
- マヨネーズにわさび、山椒、卵の黄身、ラー油、オリーブオイルを入れてよく混ぜてください
- 千晴とVIPの深夜の遊戯
- ぺこーら、地震で同僚が次々配信を止めるなか強行し続けるので悪目立ちするwww [268244553]
- 巨大地震 [957955821]
- カメラのキタムラとかいう穴場
- ひろゆき「愛があるから人は苦しまなきゃいけないんだね」
