[過去ログ] C言語なら俺に聞け 163 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
379: (JP 0Hdf-6m00) 2024/11/26(火)22:12 ID:JxXv+doZH(1) AAS
VS CodeでEchoAPIを使うと、ツールを切り替えずにAPIテストをシームレスに管理できるようになったよ!
380: (ワッチョイ d761-7ouQ) 2024/11/29(金)15:48 ID:QX01Nly20(1) AAS
以下のサンプルプログラムが理解できず困っています。
該当プログラムは、コマンドラインから読み込んだBMPの色データを矩形として並べていくというものの一部を抜粋しています。
以下のfor文は
カラーテーブルの数を取得する→
ブラシを設定する→
先頭の構造体メンバからiCount先の構造体メンバを指定→
iCountにインクリメント
という流れだと考えられると思うのですが、1に対し1カラービット分左シフトとなっている部分がどういったロジックによって数の取得が実現されているのかわかりません。
質問は2点あり、どのようにしてテーブル数を取得しているのか、コードの理解は正しいのかについてお答えしていただければと思います。
サンプルコード
#include <windows.h>
BITMAPFILEHEADER bmpFileHeader;
BITMAPCOREHEADER bmpCoreHeader;
RGBTRIPLE *prtColor;
for ( ; iCount < (1 << bmpCoreHeader.bcBitCount) ; iCount++) {
SelectObject(hdc , CreateSolidBrush(
RGB( (prtColor + iCount)->rgbtRed ,
(prtColor + iCount)->rgbtGreen ,
(prtColor + iCount)->rgbtBlue
))
381(1): (スプッッ Sd3f-G09H) 2024/11/29(金)16:12 ID:YWo8X0edd(1) AAS
bcBitCountはピクセルあたりビット数で1,4,8,24だそう
nビットで表せる値は2^n通りで、これは左シフト1<<nで計算できる
382(1): (ワッチョイ ff76-J7R8) 2024/11/29(金)23:08 ID:5pZynS2U0(1) AAS
# 質問されていない部分だけど…
iCountと比較する値はループ内で変動しないよね?
だったら毎回計算せずにループ前で計算して別変数に記憶しておくほうがよくないかい?
383: (ワッチョイ ffd6-G09H) 2024/11/30(土)00:28 ID:b6kb1MmL0(1) AAS
今時のコンパイラは十分賢いので気にすることない
384: (ワッチョイ ff63-cdGy) 2024/11/30(土)00:37 ID:VtvuoLT+0(1/5) AAS
ユーザーの犯したバグも直してくれるとありがたいなあ
385(1): (ワッチョイ ff76-J7R8) 2024/11/30(土)00:47 ID:k7UOR52k0(1/8) AAS
シフトでも掛算でもどっちでもいいけど
質問者のように読んで悩むのは問題
コメント書いておけ
ループ内毎回計算か最適化でループ外に出したかは
コンパイル後の逆アセンブルとかで確認するの?
だったら間違いないようにループ外に出す方が良い癖にもなると思うのだが
386(1): (ワッチョイ bf79-q0Tp) 2024/11/30(土)09:43 ID:54hbVEvk0(1/5) AAS
380の知能では最適化したつもりが新たなバグを埋め込む事になるかもしれん
自身の身の丈に合ったコードにしとけ
未来の自分が賢くなってる事を信じて
387(1): (アウアウエー Sadf-wjfe) 2024/11/30(土)09:49 ID:l0dFcapba(1) AAS
#include <windows.h>
BITMAPFILEHEADER bmpFileHeader;
BITMAPCOREHEADER bmpCoreHeader;
RGBTRIPLE *prtColor;
↑
この間に何も描かれてないのは投稿者が勝手に削除したの?元から無いの?
↓
for ( ; iCount < (1 << bmpCoreHeader.bcBitCount) ; iCount++) {
SelectObject(hdc , CreateSolidBrush(
RGB( (prtColor + iCount)->rgbtRed ,
(prtColor + iCount)->rgbtGreen ,
(prtColor + iCount)->rgbtBlue
))
388: (ワッチョイ ff76-J7R8) 2024/11/30(土)11:23 ID:k7UOR52k0(2/8) AAS
なんでこんなに読めないのか理由がわかった
変数名や字下げや「,」前のブランクなど
論理そのもの以前にコーディングの美しさが全然無い
389: (ワッチョイ ff63-cdGy) 2024/11/30(土)11:53 ID:VtvuoLT+0(2/5) AAS
この掲示板書き込むと、スペースやタブは消されちゃうんだよな。
だから綺麗に整形した状態でソース載せたいなら、
全角スペース使うしかない。
あるいはソース公開出来るサイトにアップロードして、
そのリンクを張るなりする。
そういうサイトは、>>1 に書いてある。
390: (ワッチョイ bfd9-6oxW) 2024/11/30(土)12:18 ID:tlb45efI0(1) AAS
美しさとか言い出したら自転車置き場の議論なるからやめとけ
391: (ワッチョイ ff63-cdGy) 2024/11/30(土)12:21 ID:VtvuoLT+0(3/5) AAS
2chスレ:tech
色々試し書きしたいなら、テストスレがあるから、そこでやって
392: (ワッチョイ ff76-J7R8) 2024/11/30(土)15:56 ID:k7UOR52k0(3/8) AAS
python自体のスタイルPEP8に加えてCについてのPEP7も整備されているのに
外部リンク:peps.python.org
あえてそれに背くコーディングをする理由が見つからない
GNUのへんてこコーディングも規約文章は整備されている
393: (ワッチョイ bf79-q0Tp) 2024/11/30(土)16:28 ID:54hbVEvk0(2/5) AAS
他人のふんどしででかい顔のpythonは存在自体がきしょくってぇ
そんなもん使ってる奴の押し付けに従う気にはとてもなれないって感じぃ
394: はちみつ餃子◆8X2XSCHEME (ワッチョイ f732-hCSs) 2024/11/30(土)16:41 ID:VBYh6hCP0(1/2) AAS
自分の使ってるテキストエディタにコピペして整形を実行したら一瞬でどうとでもなるんだからどうでもいいだろ。
395(1): (ワッチョイ ff76-J7R8) 2024/11/30(土)17:05 ID:k7UOR52k0(4/8) AAS
func(a , b , c );
func(a, b, c);
上から下への変換はインデントとは異なりやっかい
396: はちみつ餃子◆8X2XSCHEME (ワッチョイ f732-hCSs) 2024/11/30(土)17:22 ID:VBYh6hCP0(2/2) AAS
>>395
どんな古臭いフォーマッタを使ってるんだ?
397: (ワッチョイ d761-7ouQ) 2024/11/30(土)17:25 ID:9y3I76FS0(1/2) AAS
>>381
シフト演算を行った場合、10進数の1に対して乗算を行うわけではなく、2進数に対して行うという認識で良いでしょうか?
すなわち、この場合を10進数で表すと、1ではなくて2に対して、1,4,8,24、のいずれかを冪乗し、何通りの色の組み合わせがあるのかを確かめることができるというわけですね。
>>382
コピペしただけなのでとりあえず理解をと思い書き込みました。自身で書くときはそうしたほうがわかりやすいかもしれませんね。
398: (ワッチョイ d761-7ouQ) 2024/11/30(土)17:25 ID:9y3I76FS0(2/2) AAS
>>385
少し別添えで記述されてはいたのですが、それだけでは理解に至らなく書き込みした次第です。
>>386
そうなんです、私も身の丈に合うコードにしたいのは山々なのです。
ところで、初級者向けのGUI作成の手引書を教えていだだけませんか?もちろん、ここ5年以内の環境で
>>387
勝手ながら削除しています。素人考えなのは承知です。
仕事柄、利権や法にはうるさくあらねばなりませんので、リスク回避です。
399: (ワッチョイ bf79-q0Tp) 2024/11/30(土)18:05 ID:54hbVEvk0(3/5) AAS
Cは知っといた方がいいけど
GUIをやりたいならこのスレに居るのは時間の無駄なんだが
そのBITMAPなんちゃらも以下の環境では気にしなくていい
GUI開発おすすめ言語
iOS macOSアプリ Swift、Objective-C
Androidアプリ Kotlin、Java
Webアプリ Kotlin、Java
Windows C#
なおWeb系はHTML/CSS、JavaScript/TypeScriptは必須と思って頂きたい
400: (ワッチョイ ff63-cdGy) 2024/11/30(土)18:12 ID:VtvuoLT+0(4/5) AAS
Windowsの内部構造を知るのは時間の無駄なのか
401: (ワッチョイ bf79-q0Tp) 2024/11/30(土)18:17 ID:54hbVEvk0(4/5) AAS
BITMAPなんちゃらに詳しくなった所でWindowsの内部構造を知ったことにはならないんだがぁ?
現行Windows11の内部構造なんてきしょすぎてそもそも知りたくもないわ
402: (ワッチョイ ff63-cdGy) 2024/11/30(土)18:33 ID:VtvuoLT+0(5/5) AAS
そういう人はソフト開発に向いてないよ
403: (ワッチョイ ff76-J7R8) 2024/11/30(土)18:37 ID:k7UOR52k0(5/8) AAS
これだけ見て分かるわけ無いよ
max = 1 << bmpCoreHeader.bcBitCount;
for (iCountの初期値が無いよ、普通0からだよね; iCount < max; iCount++) {
// テーブルRGB値をブラシの色に設定?
brush = CreateSolidBrush(...);
// RGBで色指定したブラシで塗る?hdcが変わらんようだが何回も呼ぶ意味があるの?
SelectObject(hdc, brush);
// これ以降があるのか…
}
404: (ワッチョイ ff76-J7R8) 2024/11/30(土)18:53 ID:k7UOR52k0(6/8) AAS
bmpCoreHeader.bcBitCount の範囲チェックが必要そう
uint64_t max;
max = 1 << 64; // max == 0x8000000000000000 で意味がありそう
max = 1 << 65; // これ64bit整数の範囲超えているよね、プロセッサ依存の値になる予感
405: (ワッチョイ ff76-J7R8) 2024/11/30(土)19:19 ID:k7UOR52k0(7/8) AAS
64bitシフトでも溢れた
これ難しいね
uint64_t seed, max
seed = 1;
max = seed << 63; // 0x80000000 で期待どおり
max = 1ull << 63; // 0x80000000 これも期待どおり
max = 1 << 63; // 即値1のレジスタ範囲が足りない?
max = 1 << 63; // 即値1だと32bitなのか
406: (スプッッ Sd8b-G09H) 2024/11/30(土)19:23 ID:ePDG6JlId(1) AAS
カラーパレットを使うのは1,4,8って決まってるんだが
407(1): 青木康善 (アウアウウー Sa5b-8bf6) 2024/11/30(土)19:52 ID:exhSsXMya(1) AAS
トリプルポインタが理解不能です。
408: (ワッチョイ ff76-J7R8) 2024/11/30(土)20:06 ID:k7UOR52k0(8/8) AAS
1, 4, 8以外のエラー処理が無ければ手抜きプログラムだよ
上下前次1-新書関写板覧索設栞歴
あと 594 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.020s