↑
次スレを作る時は上記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:c4bnQMl3M196デフォルトの名無しさん (ワッチョイ 7f63-cT+3)
2019/02/20(水) 18:09:44.13ID:yWD0fIVX0 該当する素数一覧が埋め込まれた文字列を表示するプログラムが一番速そう
197デフォルトの名無しさん (スッップ Sd7f-tyEA)
2019/02/20(水) 18:34:58.50ID:MxetRGgJd 俺は拡張性がちらついてエラトステネスにしたくなるわ。どれだけの実行速度が求められるのかわからないとどの方法でやるか決心がつかなくてタイムアップしそうw
198デフォルトの名無しさん (アウアウウー Sa4b-4Twi)
2019/02/20(水) 18:48:50.68ID:WptMO45ba >>192
問題の意図や目的を明示せずに解かせた答えだけみても、その人がどんな意図でその回答を出したのかは断定できないから、これだけで実務がどうこう言うのは短絡的だとは思うよ。
よくある性格診断とかで、○○を選んだあなたは××な性格です〜ってのがあるけど、解説を聞いてもまったく説得力のない決めつけがほとんどだし。それよりはいくぶんましだけど。
問題の意図や目的を明示せずに解かせた答えだけみても、その人がどんな意図でその回答を出したのかは断定できないから、これだけで実務がどうこう言うのは短絡的だとは思うよ。
よくある性格診断とかで、○○を選んだあなたは××な性格です〜ってのがあるけど、解説を聞いてもまったく説得力のない決めつけがほとんどだし。それよりはいくぶんましだけど。
199デフォルトの名無しさん (ワッチョイ 7f63-cT+3)
2019/02/20(水) 18:51:44.09ID:yWD0fIVX0 実務的には、「要求を満たし、簡潔にして高速で間違いがないこと」位かな
200デフォルトの名無しさん (エムゾネ FF7f-tyEA)
2019/02/20(水) 18:53:27.21ID:onU160B4F >>199
いや拡張性をサッとそえとく心配りは必要だろ
いや拡張性をサッとそえとく心配りは必要だろ
201デフォルトの名無しさん (スッップ Sd7f-tyEA)
2019/02/20(水) 18:55:22.57ID:MxetRGgJd 夜な夜な素数配列DBをどんどん作ってくれるプログラムと、素数配列DBから値を引っ張ってくれるプログラムの組み合わせでファイナルアンサーだ!
202さまよえる蟻人間 ◆T6xkBnTXz7B0 (スププ Sd7f-fXCu)
2019/02/20(水) 18:55:39.06ID:AQq/x/Ljd 3以上の素数は奇数であること。
n以下の素数を調べるときは、ルートn以下の約数を調べればいいこと。
整数論を勉強したなら、これくらいは知っておいて欲しい。
n以下の素数を調べるときは、ルートn以下の約数を調べればいいこと。
整数論を勉強したなら、これくらいは知っておいて欲しい。
203デフォルトの名無しさん (アウアウウー Sa4b-s2oh)
2019/02/20(水) 19:05:39.41ID:agArr1lpa >>199
組み込み用でメモリが非常に少ないマシン用のプログラムの場合もう一捻り必要。
組み込み用でメモリが非常に少ないマシン用のプログラムの場合もう一捻り必要。
204デフォルトの名無しさん (アウアウウー Sa4b-s2oh)
2019/02/20(水) 19:07:07.48ID:agArr1lpa ま、いいや。うちに帰ってから俺が変なプログラム作ってみるよ。
205194 (ワッチョイ 877b-WJvq)
2019/02/20(水) 19:09:30.26ID:V5JGZApS0 >>196 こんな感じね。
#include <stdio.h>
int main(void)
{
puts("2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97");
return 0;
}
どうやって文字列を作ったかはヒミツ。本当に合ってるかは不明。
「素数なら表示し、素数でなければ表示しない」の部分は
テーブルがすでに出来てるとすれば、
tbl[i] && printf("%d\n", i);
てな具合に論理演算子の短絡評価を使う手もあるか。
パズルとしては面白いけど、実用で何の意味があるのか、
金払って受験する資格試験の問題としてどうなのか、疑問だなぁ。
#include <stdio.h>
int main(void)
{
puts("2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97");
return 0;
}
どうやって文字列を作ったかはヒミツ。本当に合ってるかは不明。
「素数なら表示し、素数でなければ表示しない」の部分は
テーブルがすでに出来てるとすれば、
tbl[i] && printf("%d\n", i);
てな具合に論理演算子の短絡評価を使う手もあるか。
パズルとしては面白いけど、実用で何の意味があるのか、
金払って受験する資格試験の問題としてどうなのか、疑問だなぁ。
206さまよえる蟻人間 ◆T6xkBnTXz7B0 (スププ Sd7f-fXCu)
2019/02/20(水) 19:12:37.32ID:AQq/x/Ljd 素数の知識がなければ暗号解読やハッキングができないかも。
207デフォルトの名無しさん (ワッチョイ 5fda-iZZg)
2019/02/20(水) 19:33:00.95ID:/pFWY/nZ0 この流れだと
世の中のあらゆる暗号鍵はあらかじめ配列に格納することで突破可能、どうやって配列を作るかは秘密
とか言い出しそうだな
本質が分かってない
素数を高速に表示することが目的ではなく素数を少ない計算量で見つける事が本来の目的
世の中のあらゆる暗号鍵はあらかじめ配列に格納することで突破可能、どうやって配列を作るかは秘密
とか言い出しそうだな
本質が分かってない
素数を高速に表示することが目的ではなく素数を少ない計算量で見つける事が本来の目的
208デフォルトの名無しさん (ワッチョイ 877b-WJvq)
2019/02/20(水) 19:46:25.77ID:V5JGZApS0209さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 8701-fXCu)
2019/02/20(水) 19:56:53.43ID:jAMIqMc60 >>207
そのアイディアに近いものはレインボーテーブルと呼ばれていて、すでに実用化されている。
そのアイディアに近いものはレインボーテーブルと呼ばれていて、すでに実用化されている。
210デフォルトの名無しさん (ワッチョイ 5fda-yQ/S)
2019/02/20(水) 20:08:03.07ID:/pFWY/nZ0211さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 8701-fXCu)
2019/02/20(水) 20:23:16.84ID:jAMIqMc60 一般的なコンピューターでは素数暗号の解読は困難だね。A5/1 Security Projectが進めばどうなるかわからないが。
212さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 8701-fXCu)
2019/02/20(水) 20:25:26.46ID:jAMIqMc60 Windowsのユーザーアカウントくらいなら数日あれば。。。
213デフォルトの名無しさん (アウアウクー MM7b-3QuV)
2019/02/20(水) 20:27:13.73ID:EKI9LXSlM >>195
>整数論の基礎
素数だけで構成する積による表現がすべて自然数について存在すること、ならびに、この積の表現が一通りであることを証明してください
>整数論の基礎
単に掛け算の交換則だけでいいのでは?
>整数論の基礎
素数だけで構成する積による表現がすべて自然数について存在すること、ならびに、この積の表現が一通りであることを証明してください
>整数論の基礎
単に掛け算の交換則だけでいいのでは?
>>205
それは表示した数が、果たして素数かどうか、を示してはいませんよね
それは表示した数が、果たして素数かどうか、を示してはいませんよね
>>206
RSA 暗号はもう古いです、今は elgamal 暗号がトレンドです
RSA 暗号はもう古いです、今は elgamal 暗号がトレンドです
219さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 8701-fXCu)
2019/02/20(水) 20:33:59.13ID:jAMIqMc60 >>215
「ある整数の倍数の存在が周期的であること」を利用すれば、メモリーを節約できる。
「ある整数の倍数の存在が周期的であること」を利用すれば、メモリーを節約できる。
>>219
たしかに 2 と 3 の公倍数である 6 をもとに
6n + 1, 6n + 5 だけをテーブルに載せる、とかは可能ですね
私はやったことがない、それはどうでもいいとして、これをコード化(coding-realized) したのも見たことがありません、いつか誰かやるだろうと思っていたんですが、なかなか表に表れませんね
たしかに 2 と 3 の公倍数である 6 をもとに
6n + 1, 6n + 5 だけをテーブルに載せる、とかは可能ですね
私はやったことがない、それはどうでもいいとして、これをコード化(coding-realized) したのも見たことがありません、いつか誰かやるだろうと思っていたんですが、なかなか表に表れませんね
222さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 8701-fXCu)
2019/02/20(水) 20:44:12.93ID:jAMIqMc60 >>216
3以上の素数pが奇数でない、すなわち偶数であれば、偶数の定義より、pは2で割り切れるが、pに2以外の約数があれば素数でない。矛盾。□
3以上の素数pが奇数でない、すなわち偶数であれば、偶数の定義より、pは2で割り切れるが、pに2以外の約数があれば素数でない。矛盾。□
223デフォルトの名無しさん (ワッチョイ 7f8f-M0iL)
2019/02/20(水) 20:48:00.19ID:ZC/ijL840 >>201
サーバー側ならこれが攻守最強だな。隙がねぇ……
サーバー側ならこれが攻守最強だな。隙がねぇ……
226さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 8701-fXCu)
2019/02/20(水) 21:00:10.59ID:jAMIqMc60 >>221
素数プログラミングの競技に参加してやってみれば?
素数プログラミングの競技に参加してやってみれば?
227さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 8701-fXCu)
2019/02/20(水) 21:01:27.72ID:jAMIqMc60 >>225
「約数2があれば」に訂正。
「約数2があれば」に訂正。
>>227
うむ、それでいい感じですね
うむ、それでいい感じですね
229さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 8701-fXCu)
2019/02/20(水) 21:06:35.67ID:jAMIqMc60 倍数の周期性を使えばBuzzFizz問題の応用(多重化)でメモリーが節約できるはず。
230さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 8701-fXCu)
2019/02/20(水) 21:10:58.63ID:jAMIqMc60 バッチ処理で素数生成するなら、途中から計算を再開できるようにしておくとよい。
231さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 8701-fXCu)
2019/02/20(水) 21:12:34.79ID:jAMIqMc60 >>216
「素数生成 ルート」でWeb検索。
「素数生成 ルート」でWeb検索。
232デフォルトの名無しさん (ラクペッ MM9b-iZZg)
2019/02/20(水) 21:39:38.70ID:IdoLDUDuM 巨大な素数の一覧
https://ja.wikipedia.org/wiki/%E5%B7%A8%E5%A4%A7%E3%81%AA%E7%B4%A0%E6%95%B0%E3%81%AE%E4%B8%80%E8%A6%A7
1億桁を超える素数を発見すれば懸賞金が手に入るぞ
お前ら頑張れ
https://ja.wikipedia.org/wiki/%E5%B7%A8%E5%A4%A7%E3%81%AA%E7%B4%A0%E6%95%B0%E3%81%AE%E4%B8%80%E8%A6%A7
1億桁を超える素数を発見すれば懸賞金が手に入るぞ
お前ら頑張れ
233デフォルトの名無しさん (ワッチョイ 8701-YoT1)
2019/02/20(水) 22:33:31.62ID:bRSP0nNv0 大学の授業でやってるがわけわからん
234デフォルトの名無しさん (ワッチョイ 3d7b-Frsa)
2019/02/21(木) 04:51:28.69ID:k7mDakXF0 「3以上の素数は偶数ではない」って、
「2以外の2の倍数は素数ではない」と言い換えられるよね。
対偶命題の真偽は等しい、ってことで。
「3以上」「2以外」の部分の処理がちょいと面倒かも知れんが。
素数の定義から自動的に成立する、トートロジーって気もする。
実用的には、チェックすべき対象が一気に半減するから
決して役に立たないつまらない事実とは言わないけど。
「2以外の2の倍数は素数ではない」と言い換えられるよね。
対偶命題の真偽は等しい、ってことで。
「3以上」「2以外」の部分の処理がちょいと面倒かも知れんが。
素数の定義から自動的に成立する、トートロジーって気もする。
実用的には、チェックすべき対象が一気に半減するから
決して役に立たないつまらない事実とは言わないけど。
235デフォルトの名無しさん (ワッチョイ a6ca-rusg)
2019/02/21(木) 05:47:41.57ID:0ZBMuCH70 なぜ「nの倍数」のうち「2の倍数」だけを特別視するんだ?
236デフォルトの名無しさん (ワッチョイ 3d7b-Frsa)
2019/02/21(木) 06:56:30.22ID:k7mDakXF0 たぶん2の倍数に特別に「偶数」って名前がついてるから。
て言うか「2の倍数」を「偶数」と呼び替えるせいで
「3以上の素数は偶数ではない」がそれらしい命題に見える心理的効果。
て言うか「2の倍数」を「偶数」と呼び替えるせいで
「3以上の素数は偶数ではない」がそれらしい命題に見える心理的効果。
237デフォルトの名無しさん (ワッチョイ a6ca-rusg)
2019/02/21(木) 07:07:07.36ID:0ZBMuCH70 じゃあ例えば3の倍数を俺数と呼ぶことにすれば
「5以上の素数は俺数ではない」がそれらしい命題に見えるわけか
「5以上の素数は俺数ではない」がそれらしい命題に見えるわけか
238デフォルトの名無しさん (ワッチョイ b67c-dS/9)
2019/02/21(木) 09:23:02.63ID:hmZcoRew0 >>237
実際にそういう理屈で俺数をちゃんと名前つけて定義してた気がする
実際にそういう理屈で俺数をちゃんと名前つけて定義してた気がする
239デフォルトの名無しさん (ラクペッ MM65-JHNE)
2019/02/21(木) 10:06:27.81ID:vm8j2cEaM https://ja.wikipedia.org/wiki/%E5%9C%8F%E8%AB%96
集合論的な数学理論の構成では集合やその元に対して写像や関係を導入し、それらが満たすべき公理を列挙する。その公理を満たすような「構造」を持った個々の集合が理論の具体的な実現を示していて、それら一つ一つの実現に共通の性質が公理から演繹的に証明される。
集合論的な数学理論の構成では集合やその元に対して写像や関係を導入し、それらが満たすべき公理を列挙する。その公理を満たすような「構造」を持った個々の集合が理論の具体的な実現を示していて、それら一つ一つの実現に共通の性質が公理から演繹的に証明される。
240デフォルトの名無しさん (ワッチョイ 6663-dS/9)
2019/02/21(木) 10:43:14.10ID:hP/J64Xh0 10進数で扱ったときに下一桁だけで素数でないか判定できるし
241デフォルトの名無しさん (ラクペッ MM65-JHNE)
2019/02/21(木) 11:52:49.43ID:TYXtdJfXM https://ja.wikipedia.org/wiki/%E4%BB%A3%E6%95%B0%E4%BD%93
一般には、素数は代数体の整数環の素元として定義される(そこでは反数などの同伴なものも素数に含まれる)。このため、有理整数環での素数は有理素数と呼ばれることもある。
自然数あるいは実数の中での素数の分布の様子は高度に非自明で、リーマン予想などの現代数学の重要な問題との興味深い結び付きが発見されている。
一般には、素数は代数体の整数環の素元として定義される(そこでは反数などの同伴なものも素数に含まれる)。このため、有理整数環での素数は有理素数と呼ばれることもある。
自然数あるいは実数の中での素数の分布の様子は高度に非自明で、リーマン予想などの現代数学の重要な問題との興味深い結び付きが発見されている。
242デフォルトの名無しさん (ワッチョイ a60d-rusg)
2019/02/21(木) 12:21:11.52ID:9bhJdGzC0243デフォルトの名無しさん (ワッチョイ 11d2-E+eR)
2019/02/21(木) 12:24:22.12ID:ZaAjcalq0 2の倍数は1個となりにあるけれど3の倍数は2個となりにあるわけじゃないからだろ
244デフォルトの名無しさん (ワッチョイ 6663-dS/9)
2019/02/21(木) 12:26:58.45ID:hP/J64Xh0 世界の半数の人間を一気に殺せるとしたら、スゴイ兵器だろう
245デフォルトの名無しさん (JP 0Hb5-haK8)
2019/02/21(木) 12:45:09.74ID:AfMCgFa5H もういいからいいかげんCの話しろよ
246デフォルトの名無しさん (ラクペッ MM65-JHNE)
2019/02/21(木) 12:48:37.97ID:FW7y2HsrM https://ja.wikipedia.org/wiki/%E5%90%88%E5%90%8C%E7%AE%97%E8%A1%93
ガウスの貢献はこの集合、今日整数の合同類 の環 ℤ/nℤ と呼ばれる代数系、の構造を詳らかにするものであった。第一に加法に関して考えれば、これは 1 を生成元とする巡回群を定める。第二に乗法に関しては、これは法 n に依存して性質が異なり、法 n が素数ならば体が得られる。このような方法により、計算の記述は簡素化される。
ガウスの貢献はこの集合、今日整数の合同類 の環 ℤ/nℤ と呼ばれる代数系、の構造を詳らかにするものであった。第一に加法に関して考えれば、これは 1 を生成元とする巡回群を定める。第二に乗法に関しては、これは法 n に依存して性質が異なり、法 n が素数ならば体が得られる。このような方法により、計算の記述は簡素化される。
247デフォルトの名無しさん (アークセー Sxbd-DIal)
2019/02/21(木) 13:04:43.82ID:SFQD6HMZx やっぱり理系はみんな素数が好きなのねん
248デフォルトの名無しさん (ワッチョイ 11d2-E+eR)
2019/02/21(木) 13:23:11.53ID:ZaAjcalq0 平方剰余の相互法則は奇数の素数でしかなりたたないから2は特別らしい
249デフォルトの名無しさん (ワッチョイ a95f-qM0Q)
2019/02/21(木) 20:15:32.30ID:lsmx9sV60 ダメプログラマだらけだな。
250デフォルトの名無しさん (ワッチョイ 6ada-JHNE)
2019/02/21(木) 20:25:59.92ID:m+qFL4AC0 プログラマ以前のただのC言語の評論家の集まりだからな
数学の素養どころか一般的な定番アルゴリズムすら理解しているのか怪しいのがいくらでもいる
数学の素養どころか一般的な定番アルゴリズムすら理解しているのか怪しいのがいくらでもいる
251デフォルトの名無しさん (ワッチョイ a95f-qM0Q)
2019/02/21(木) 20:29:14.38ID:lsmx9sV60 「100までの素数」は単にロジックが書けるかどうかの話で、素数の話ではないだろうに。
252デフォルトの名無しさん (ワッチョイ 6ada-JHNE)
2019/02/21(木) 20:33:10.06ID:m+qFL4AC0 配列に数字を並べて表示するだけの処理の何処にロジックがあるのやら
あれではただのゴリ押しだ
あれではただのゴリ押しだ
253デフォルトの名無しさん (ワッチョイ 668f-89Xw)
2019/02/21(木) 20:52:13.17ID:S9yUyDkx0 誰かがこの問題から実務向きかどうかがわかる、なんて言うからいけない
254さまよえる蟻人間 ◆T6xkBnTXz7B0 (スププ Sd0a-zIhq)
2019/02/21(木) 21:00:34.34ID:3Jj6vI7vd 最近知ったことだが、clangとclang++には、-pedantic -Wallの他に-Weverythingというオプションがある。これを使えば最大限に警告してくれる。
255デフォルトの名無しさん (ワッチョイ a95f-qM0Q)
2019/02/21(木) 21:25:46.65ID:lsmx9sV60 とりあえず、Cできない娘は受付時に言うとか、ホームページにわかるようにしてくれないとキツイ。
256デフォルトの名無しさん (ワッチョイ 6663-dS/9)
2019/02/21(木) 21:49:34.71ID:hP/J64Xh0 ロジックはアタマの中に
257デフォルトの名無しさん (ワッチョイ 66d2-uGSY)
2019/02/22(金) 11:10:49.03ID:Wvys6/Wz0 >192
「オッケーグーグル、『100以下の素数を表示するブログラム』を端末にダウンロードして!」
「オッケーグーグル、『100以下の素数を表示するブログラム』を端末にダウンロードして!」
258デフォルトの名無しさん (アウアウウー Sa21-0aQJ)
2019/02/22(金) 15:27:06.91ID:bcwEHSMYa С言語
259デフォルトの名無しさん (ワッチョイ 7d01-rusg)
2019/02/22(金) 15:32:39.50ID:MGDdaAr30 偶素数と奇素数
260デフォルトの名無しさん (ワッチョイ 6d27-rusg)
2019/02/22(金) 21:00:52.74ID:JBg0shn90 C言語とか勉強じゃなくて仕事だったり動くもの作らないと覚えられないと思うんだけど
何をすることでC出来るようになったの?
何をすることでC出来るようになったの?
261デフォルトの名無しさん (ワッチョイ 8d7f-zTIm)
2019/02/22(金) 21:11:58.58ID:FtBJuZ9s0 勉強だったとしても動くもの作り続ければだろうよ
262デフォルトの名無しさん (アウアウウー Sa21-0aQJ)
2019/02/22(金) 21:52:23.52ID:/efpuxREa 納期までに完成させないと大変な事になるというスリルとサスペンスが人間の能力を引き出すのです。
しかしこれは恐怖から逃れようとする行為なので恐怖がなくなる、または度胸がついてしまったらそこで終わりです。
しかしこれは恐怖から逃れようとする行為なので恐怖がなくなる、または度胸がついてしまったらそこで終わりです。
263デフォルトの名無しさん (ワッチョイ 11d2-E+eR)
2019/02/23(土) 16:48:48.66ID:RKMUv84W0 #defineじゃなくてconstすすめてくるやつは机上の空論だな
constつかったら最適ななしにするとswitchのラベルにつかえないじゃないか
constつかったら最適ななしにするとswitchのラベルにつかえないじゃないか
264デフォルトの名無しさん (ワッチョイ 3d7b-Frsa)
2019/02/23(土) 17:14:59.00ID:7GKXwuwj0 >>263
C++ では const 変数を case ラベルに使えるから、混同してる人かも。
C++ では const 変数を case ラベルに使えるから、混同してる人かも。
265デフォルトの名無しさん (ワッチョイ 3d7b-Frsa)
2019/02/23(土) 17:46:54.59ID:7GKXwuwj0 C なら「名前のついた整数」は enum だね。
スコープ効くし case のラベルにも配列定義の要素数の指定にも使える。
スコープ効くし case のラベルにも配列定義の要素数の指定にも使える。
266デフォルトの名無しさん (ワッチョイ a60e-rusg)
2019/02/23(土) 20:56:53.69ID:Ez7Plxd90 Cのenumはenum-baseがないから
どでかい定数には使えない
どでかい定数には使えない
267デフォルトの名無しさん (ワッチョイ 7d01-DIal)
2019/02/23(土) 21:13:59.35ID:tyf/JAHu0 enumはあくまで値の大小は関係なくユニークな識別子であって、大きな値が問題になるような用途に使うのはいかがなものか。
268デフォルトの名無しさん (ワッチョイ 66aa-ihwj)
2019/02/23(土) 21:41:02.60ID:W1FUX4jY0 プリミティブな定数以外のスイッチって
ものすごく気持ち悪いんだが
長大数渡して色々工夫してスイッチするのと
似たようなことコンパイラがやらなきゃいかんよね
ものすごく気持ち悪いんだが
長大数渡して色々工夫してスイッチするのと
似たようなことコンパイラがやらなきゃいかんよね
269デフォルトの名無しさん (ワッチョイ 3d7b-Frsa)
2019/02/24(日) 07:48:44.15ID:RgZ/0jGo0 C の enum は「互いに区別できる一群の整数値の組」で、
具体的な値にさほど拘らない用途で使うべき、っていう
言語機能のそもそも論を言われると、その通りなんだよな。
その意味では case のラベルに enum の値を使うのはいいけど、
配列定義の要素数で使うのは便利にコキ使いすぎ、って感じか。
実際のところ enum で表現できる値の範囲が、
配列の要素数指定に使える範囲(size_t)と一致するか、という
疑問を持って調べたけど、いまいちハッキリせず今も解消してない。
まぁ、それ言うと case ラベルで受け入れられる値の範囲が
enum の範囲と同じか、についても確信ないんだが。
(権威主義に逃げ込む気はないと事前に言い訳した上で)
#define のマクロ値の代わりに enum の値を使うってのは、
カーニハンとパイクの『プログラミング作法』第1章、
「1.5 マジックナンバー」で紹介されてることを付記しておく。
具体的な値にさほど拘らない用途で使うべき、っていう
言語機能のそもそも論を言われると、その通りなんだよな。
その意味では case のラベルに enum の値を使うのはいいけど、
配列定義の要素数で使うのは便利にコキ使いすぎ、って感じか。
実際のところ enum で表現できる値の範囲が、
配列の要素数指定に使える範囲(size_t)と一致するか、という
疑問を持って調べたけど、いまいちハッキリせず今も解消してない。
まぁ、それ言うと case ラベルで受け入れられる値の範囲が
enum の範囲と同じか、についても確信ないんだが。
(権威主義に逃げ込む気はないと事前に言い訳した上で)
#define のマクロ値の代わりに enum の値を使うってのは、
カーニハンとパイクの『プログラミング作法』第1章、
「1.5 マジックナンバー」で紹介されてることを付記しておく。
270デフォルトの名無しさん (ワッチョイ a60e-rusg)
2019/02/24(日) 08:31:42.99ID:fxLM3JpE0 enum
{
a = 4294967297
};
int main()
{
printf("%d\n", sizeof a);
printf("%llx\n", a);
}
gcc:
8
100000001
cl:
4
1
どっちが正しい?
とりあえずはコケるほうに合わせるが
{
a = 4294967297
};
int main()
{
printf("%d\n", sizeof a);
printf("%llx\n", a);
}
gcc:
8
100000001
cl:
4
1
どっちが正しい?
とりあえずはコケるほうに合わせるが
271デフォルトの名無しさん (ワッチョイ 6ada-rusg)
2019/02/24(日) 08:40:26.06ID:7CaxIYof0 以前に組込み用途の8bitマイコン用C言語を使っていた時の話
CPUの機能的にint型は8bitだった
ところが多条件の分岐処理でif-elseを使った時よりenum変数のswitch文使った方が明らかにパフォーマンスが
低下して問題になったことがあった
訳が分からず逆アセンブルして調べてみるとenum変数は何故か16bitに展開されていて条件判定毎に型変換が
発生していたことが原因だっということがあった、という昔の思い出
CPUの機能的にint型は8bitだった
ところが多条件の分岐処理でif-elseを使った時よりenum変数のswitch文使った方が明らかにパフォーマンスが
低下して問題になったことがあった
訳が分からず逆アセンブルして調べてみるとenum変数は何故か16bitに展開されていて条件判定毎に型変換が
発生していたことが原因だっということがあった、という昔の思い出
272デフォルトの名無しさん (ワッチョイ 5e3e-dS/9)
2019/02/24(日) 13:48:01.77ID:gUJTdPsI0 >>271
int が 8bit という時点で仕様に反しているので
整数演算のいろんなところで暗黙に int に変換してから
計算する C のルールが破綻するんじゃなかろうか。
処理系が必ずしも言語の規格に完全準拠する必要はないけど、
基本的な部分で変えちゃうとどういう挙動になるのか
予想しづらいよな。
int が 8bit という時点で仕様に反しているので
整数演算のいろんなところで暗黙に int に変換してから
計算する C のルールが破綻するんじゃなかろうか。
処理系が必ずしも言語の規格に完全準拠する必要はないけど、
基本的な部分で変えちゃうとどういう挙動になるのか
予想しづらいよな。
273デフォルトの名無しさん (ワッチョイ 6ada-rusg)
2019/02/24(日) 14:00:01.86ID:7CaxIYof0 charがその処理系の最小bit数であることだけは仕様に明記されてるけど
それ以外の整数型は大小関係だけが規定されていてintそのものに
具体的なbit数の決まりはなかったんじゃなかったっけ?
実際その時もchar、short、intが8bitで、longが16bitだったと思う
それ以外の整数型は大小関係だけが規定されていてintそのものに
具体的なbit数の決まりはなかったんじゃなかったっけ?
実際その時もchar、short、intが8bitで、longが16bitだったと思う
274デフォルトの名無しさん (ワッチョイ 5e3e-dS/9)
2019/02/24(日) 14:04:53.91ID:gUJTdPsI0 >>270
C ではこういうルールになっている
・ 列挙定数の値を定義する式は int 型で表現可能な値を持つ整数定数式でなければならない
・ 列挙体 (列挙型のオブジェクト) の大きさは要素の全てを保持可能な大きさをもつ
がその選択は処理系定義である。
・ 列挙定数の型は (列挙型ではなく) int である
つまり、 C では列挙体と列挙定数の型が異なり、
列挙定数の型は int そのもの。
それは単に int の大きさがそれぞれ違うってだけじゃないの?
だとするとどちらの挙動も仕様通り。
(余談だが C++ では列挙定数の型は列挙型なので、 C とは少し解釈が違う。)
C ではこういうルールになっている
・ 列挙定数の値を定義する式は int 型で表現可能な値を持つ整数定数式でなければならない
・ 列挙体 (列挙型のオブジェクト) の大きさは要素の全てを保持可能な大きさをもつ
がその選択は処理系定義である。
・ 列挙定数の型は (列挙型ではなく) int である
つまり、 C では列挙体と列挙定数の型が異なり、
列挙定数の型は int そのもの。
それは単に int の大きさがそれぞれ違うってだけじゃないの?
だとするとどちらの挙動も仕様通り。
(余談だが C++ では列挙定数の型は列挙型なので、 C とは少し解釈が違う。)
275デフォルトの名無しさん (ワッチョイ 392f-rusg)
2019/02/24(日) 14:05:53.36ID:yQAH7TUL0 >>273
気持ちとしては賛成したいんだが
残念なことにISO/IEC9899 5.2.4.2.1 Sizes of integer types <limits.h>に、
INT_MAX +32767と書いてあるんだ
腹立たしいクソ規定だがそうなっている
気持ちとしては賛成したいんだが
残念なことにISO/IEC9899 5.2.4.2.1 Sizes of integer types <limits.h>に、
INT_MAX +32767と書いてあるんだ
腹立たしいクソ規定だがそうなっている
276デフォルトの名無しさん (ワッチョイ 5e3e-dS/9)
2019/02/24(日) 14:15:23.84ID:gUJTdPsI0 >>273
ビット数という形ではないが、
limits.h で定義される各整数型が表現可能な数値の範囲を表すマクロ
についての最低限度の値という形で間接的に定義されている。
C99 だと 5.2.4.2.1 にある。
int は実質的に 16bit は必要。
ビット数という形ではないが、
limits.h で定義される各整数型が表現可能な数値の範囲を表すマクロ
についての最低限度の値という形で間接的に定義されている。
C99 だと 5.2.4.2.1 にある。
int は実質的に 16bit は必要。
277デフォルトの名無しさん (ワッチョイ 66aa-ihwj)
2019/02/24(日) 15:01:36.58ID:eMMK67XW0 整数型をワードより大きくしなきゃいけない
なんてなったら使い物にならんよな
なんてなったら使い物にならんよな
278デフォルトの名無しさん (スッップ Sd0a-5Ibu)
2019/02/24(日) 16:23:47.05ID:9mv8IHEdd 確かにint型は規格的には最低16bit必要みたいだなぁ
C11 N1570 draft
5.2.4.2.1
―int型オブジェクトの最低値
INT_MIN -32767 // -(2^15 - 1)
―int型オブジェクトの最大値
INT_MAX 32767 // 2^15 - 1
6.2.5.5
「単なる」int型オブジェクトは実行環境のアーキテクチャにとって自然な(<limits.h>ヘッダに定義されたINT_MINからINT_MAXまでの任意の値を含むに十分大きい)サイズをもつ。
C11 N1570 draft
5.2.4.2.1
―int型オブジェクトの最低値
INT_MIN -32767 // -(2^15 - 1)
―int型オブジェクトの最大値
INT_MAX 32767 // 2^15 - 1
6.2.5.5
「単なる」int型オブジェクトは実行環境のアーキテクチャにとって自然な(<limits.h>ヘッダに定義されたINT_MINからINT_MAXまでの任意の値を含むに十分大きい)サイズをもつ。
279デフォルトの名無しさん (ワッチョイ 2a79-dS/9)
2019/02/24(日) 16:36:11.63ID:BJ3WFlaM0280デフォルトの名無しさん (ワッチョイ 6ada-JHNE)
2019/02/24(日) 16:49:38.07ID:7CaxIYof0 言語規格そのものというより標準ライブラリの都合というかヘッダーの仕様だけのような気がするけど
limit.hで最大値と最小値を規定するのであれば-128と127を宣言すればintの範囲を変更した実装も可能ではあるな
厳密には問題があるかも知れないけどC99準拠の実装と言うことでお茶を濁している処理系はあり得そうだ
limit.hで最大値と最小値を規定するのであれば-128と127を宣言すればintの範囲を変更した実装も可能ではあるな
厳密には問題があるかも知れないけどC99準拠の実装と言うことでお茶を濁している処理系はあり得そうだ
281デフォルトの名無しさん (アウアウウー Sa21-sU2d)
2019/02/24(日) 19:23:23.70ID:iK4D+UQia >>279
組み込み市場的に8ー16bitが主流だけどな。
組み込み市場的に8ー16bitが主流だけどな。
282デフォルトの名無しさん (ワッチョイ 7d01-DIal)
2019/02/24(日) 22:09:42.91ID:8/luM3Zk0 一時期、組み込みもLinuxに席巻されそうになったこともあるけど昨今のIoTブームで16bit以下の超省電力が復権してきたイメージあるわ。
283デフォルトの名無しさん (アウアウウー Sa21-rcBw)
2019/02/24(日) 22:14:44.36ID:uaNZoE2Ca でもそういう機器ってメモリの読み書きしかすることねえもんな。
あんまりおもろない。
あんまりおもろない。
284デフォルトの名無しさん (ワッチョイ 6ada-JHNE)
2019/02/24(日) 22:24:41.13ID:7CaxIYof0 組み込みではLinuxどころかOSすら搭載してないシステムも多いよ
ネット家電なんかの一部を除けばエアコン、冷蔵庫、洗濯機など家電製品の殆どはOSもファイルシステムもネットワークスタックも無縁のスタンドアローン動作
電源投入リセット後ひたすら処理ループを回すだけ
CPUコアは8bitか16bitでRAMは数KB、ROMは数十KB程度のワンチップマイコン
ネット家電なんかの一部を除けばエアコン、冷蔵庫、洗濯機など家電製品の殆どはOSもファイルシステムもネットワークスタックも無縁のスタンドアローン動作
電源投入リセット後ひたすら処理ループを回すだけ
CPUコアは8bitか16bitでRAMは数KB、ROMは数十KB程度のワンチップマイコン
285デフォルトの名無しさん (ワッチョイ 6ada-JHNE)
2019/02/24(日) 22:29:53.46ID:7CaxIYof0 メモリの読み書きよりもIOポートを制御するのがメインの仕事
286デフォルトの名無しさん (ワッチョイ 6663-dS/9)
2019/02/24(日) 22:33:57.82ID:2wDVhIfR0 殆ど電卓だな
287デフォルトの名無しさん (ワッチョイ 6ada-JHNE)
2019/02/24(日) 22:41:13.06ID:7CaxIYof0 電卓ほど単純ではないけどね
まともにフィードバック制御を実装するにはそれなりの演算負荷は掛かる
センサー入力に応じて出力を迅速安定に目標に追従させるには裏では予測判断も必要
マイコン使っている以上は単調なON/OFF制御では無いよ
まともにフィードバック制御を実装するにはそれなりの演算負荷は掛かる
センサー入力に応じて出力を迅速安定に目標に追従させるには裏では予測判断も必要
マイコン使っている以上は単調なON/OFF制御では無いよ
288デフォルトの名無しさん (ワッチョイ 6aab-uGSY)
2019/02/24(日) 22:49:58.22ID:gSQz1x8q0 欲深い人間のことだからどうせすぐいろんなことをさせたくなる
289デフォルトの名無しさん (ワッチョイ 668f-89Xw)
2019/02/24(日) 23:23:28.26ID:wTcw/8fo0 IoTなら制御はサーバー側じゃないの?
290デフォルトの名無しさん (ワッチョイ 6663-dS/9)
2019/02/24(日) 23:28:06.97ID:2wDVhIfR0 Fog computing がキーワードだそうだ
291デフォルトの名無しさん (アウアウウー Sa21-rcBw)
2019/02/25(月) 00:12:03.18ID:dk4D1NQWa IOポート制御とメモリ読み書きの違いがわからない
292デフォルトの名無しさん (ワッチョイ 5e3e-dS/9)
2019/02/25(月) 00:27:51.25ID:LzC1voP10 メモリーバスが I/O につながってることもあるしな。
293デフォルトの名無しさん (ワッチョイ 6ada-rusg)
2019/02/25(月) 06:19:38.59ID:/Zb+jKgT0 >>291
IOポートを弄るにはそれぞれのSFR(特殊機能レジスタ)を操作する
一般的なメモリマップトIO方式ではSFRはCPUの特定のアドレス空間にマッピングされてる
Cプログラムからはそのアドレス空間をそれぞれ適当な変数に割り当てて基本的にはビット操作で制御する
SFRのイメージが分からなければ適当なマイコンのデータシートでも見てみるとある程度は分かると思うよ
参考として電子工作で有名なPICマイコンのサイト貼っておくので見てみるといいよ
IOポートを弄るにはそれぞれのSFR(特殊機能レジスタ)を操作する
一般的なメモリマップトIO方式ではSFRはCPUの特定のアドレス空間にマッピングされてる
Cプログラムからはそのアドレス空間をそれぞれ適当な変数に割り当てて基本的にはビット操作で制御する
SFRのイメージが分からなければ適当なマイコンのデータシートでも見てみるとある程度は分かると思うよ
参考として電子工作で有名なPICマイコンのサイト貼っておくので見てみるといいよ
294デフォルトの名無しさん (ワッチョイ 6ada-rusg)
2019/02/25(月) 06:22:12.63ID:/Zb+jKgT0295デフォルトの名無しさん (ワッチョイ 392f-rusg)
2019/02/25(月) 07:08:32.40ID:YApQAEs00■ このスレッドは過去ログ倉庫に格納されています
