[過去ログ]
C言語なら俺に聞け 163 (1002レス)
C言語なら俺に聞け 163 http://mevius.5ch.net/test/read.cgi/tech/1721137434/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
356: デフォルトの名無しさん (ワッチョイ 3b2d-hB9O) [sage] 2024/11/22(金) 19:50:13.47 ID:KyG89VCU0 Q. doubleをprintfで表示するには%lfでいいの? A. double 型を printf で表示する場合、%lf ではなく %f を使用するのが一般的です。 理由: printf の可変長引数において、float 型は double 型に自動的に昇格されます。 そのため、%f は double 型の値も受け取ることができます。 %lf は scanf で double 型の値を読み込む際に使用されますが、 printf では %f と同じ意味として扱われます (C99規格以降)。 http://mevius.5ch.net/test/read.cg
i/tech/1721137434/356
357: デフォルトの名無しさん (ワッチョイ bf5f-FO3g) [] 2024/11/24(日) 19:40:17.88 ID:g9nxxeRj0 これが同じ値書いてくれないのは普通だったんだっけ. #include <stdio.h> int main() { int s=31; unsigned long i = 1 << 31; unsigned long j = 1 << 31; unsigned long k; while(i) { k = 1 << s; printf("%lu,%lu,%lu¥n",i,j,k); i = (unsigned)i>>1; j >>= 1; s--; } return 0; } http://mevius.5ch.net/test/read.cgi/tech/1721137434/357
358: デフォルトの名無しさん (ワッチョイ ff63-cdGy) [sage] 2024/11/24(日) 19:55:59.76 ID:VUrUqN1f0 手元にあるGCCとMS-C(32bit)は 同じ値が出てました http://mevius.5ch.net/test/read.cgi/tech/1721137434/358
359: デフォルトの名無しさん (ワッチョイ d7d8-7ouQ) [] 2024/11/24(日) 20:09:10.15 ID:KIy2cazo0 質問失礼します ダイアログボックスについて学習しようとしているのですが、サンプルのリソースをコピペしたところ、ダイアログボックスのIDが認識されなく手詰まりになってしまっています。 どなたかご助力ください。 TEST DIALOG (座標を書くと書き込みできない) C2059 C2061 以上のソースでエラーを吐いてしまいます。リソースをベタ打ちで記述する参考サイトが少ないので判断がつきません。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/
359
360: デフォルトの名無しさん (ワッチョイ ff63-cdGy) [sage] 2024/11/24(日) 20:28:06.09 ID:VUrUqN1f0 記述に文法上の誤りがあるって事です。 コピペで失敗しているのか、 元々のサンプルに誤りがあるかは これだけでは分かりません 文法の基本から学び直して 自分で見つけるしかないかもしれません http://mevius.5ch.net/test/read.cgi/tech/1721137434/360
361: デフォルトの名無しさん (ワッチョイ bf5f-FO3g) [] 2024/11/24(日) 20:47:32.93 ID:Hl1pEu0p0 >> 358 試していただきありがとうございます. FreeBSD clang version 18.1.6 (https://github.com/llvm/llvm-project.git llvmorg-18.1.6-0-g1118c2e05e67) Target: x86_64-unknown-freebsd14.1 と,gccは共に jの値がおかしいのです. 試しに, unsigned long j = 1 << 31; を unsigned int j = 1 << 31; にすると同じ値になる. これはコンパイラのBUGかなぁ. http://mevius.5ch.net/test/read.cgi/tech/1721137434/361
362: 警備員[Lv.1][新芽] (ワッチョイ 9fe5-fjqo) [sage] 2024/11/24(日) 22:17:04.46 ID:/KMFo2rr0 よく分からないけど unsigned long i = 1 << 31; unsigned long j = 1 << 31; を unsigned long i = 1L << 31; unsigned long j = 1L << 31; とするとうまくいく? clang どちらでも同じ結果になりそうだけど 見当違いだったらごめんなさい http://mevius.5ch.net/test/read.cgi/tech/1721137434/362
363: 警備員[Lv.1][新芽] (ワッチョイ 9fe5-fjqo) [sage] 2024/11/24(日) 22:25:28.27 ID:/KMFo2rr0 gcc -S でアセンブラ出してみてみたけど、 いや、アセンブラよくわからないんだけど、 修正前の iと jは初期化時にいずれも符号拡張されて大きな値になっていて その後なぜか iの方は下32ビットで、jの方は64ビットで計算されているようで、正しいのはむしろ jのように見えたがごめんなさい 本当にアセンブラ分からないので多分間違ってます… http://mevius.5ch.net/test/read.cgi/tech/1721137434/363
364: デフォルトの名無しさん (ワッチョイ 9f61-vAaR) [sage] 2024/11/24(日) 22:26:25.59 ID:zY64cYUd0 gcc, clang sizeof(int) == 32 sizeof(unsigned long) == 64 での出力 18446744071562067968,18446744071562067968,18446744071562067968 1073741824,9223372035781033984,1073741824 536870912,4611686017890516992,536870912 省略 8,68719476728,8 4,34359738364,4 2,17179869182,2 1,8589934591,1 これはこれで正しいと思うが http://mevius.5ch.net/test/read.cgi/tech/1721137434/364
365: 警備員[Lv.2][新芽] (ワッチョイ 9fe5-fjqo) [sage] 2024/11/24(日) 22:45:06.29 ID:/KMFo2rr0 あ、iは unsigned (int)でキャストしてるのか http://mevius.5ch.net/test/read.cgi/tech/1721137434/365
366: デフォルトの名無しさん (ワッチョイ bf5f-FO3g) [] 2024/11/24(日) 23:09:31.94 ID:Hl1pEu0p0 わかりやすく,intのものとcastかけたのにしてみました. これだとやはり,pの値だけ変でした. 元々は,binaryで数を8bit 16bit 32bitで表示する関数が,8,16が普通で32だけ変なので気がついたのでした.なんでintだと符合拡張されなくてlongだとされるかが謎. #include <stdio.h> int main() { int s=31; unsigned long i = 1 << 31; unsigned int j = 1 << 31; unsigned long p = 1 << 31; unsigned long k; while(i) {
k = 1 << s; printf("%lu,%u,%lu,%lu¥n",i,j,k,p); i = (unsigned)i>>1; j >>= 1; p >>= 1; s--; } return 0; } http://mevius.5ch.net/test/read.cgi/tech/1721137434/366
367: デフォルトの名無しさん (ワッチョイ bf5f-FO3g) [] 2024/11/24(日) 23:16:12.94 ID:Hl1pEu0p0 unsigned long p = 1 << 31; を unsigned long p = 1L << 31; にしたら同じ値になりました. ううむ,なぜ unsigned int j = 1 << 31; だとうまくいって,longだと1Lにしないとうまくいかんのだ. http://mevius.5ch.net/test/read.cgi/tech/1721137434/367
368: 警備員[Lv.4][新芽] (ワッチョイ b72e-fjqo) [sage] 2024/11/24(日) 23:36:41.28 ID:BVpPJ8iH0 右辺が 1<<31だと 左辺が intだと0x80000000がそのまま、 longだと 0xffffffff80000000に拡張されて転記されるからでは http://mevius.5ch.net/test/read.cgi/tech/1721137434/368
369: 警備員[Lv.4][新芽] (ワッチョイ b72e-fjqo) [sage] 2024/11/24(日) 23:49:31.80 ID:BVpPJ8iH0 unsigned long i = (unsigned long) 1 << 31; とすれば iは 0x80000000になるかと http://mevius.5ch.net/test/read.cgi/tech/1721137434/369
370: 警備員[Lv.4][新芽] (ワッチョイ b72e-fjqo) [sage] 2024/11/24(日) 23:50:27.79 ID:BVpPJ8iH0 1lとするのと同じだけど http://mevius.5ch.net/test/read.cgi/tech/1721137434/370
371: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-hCSs) [sage] 2024/11/25(月) 02:42:55.67 ID:EAdMpn4b0 >>367 言語仕様的に解釈すると…… シフト演算子の結果の型は左オペランドを整数拡張した後の型と同じになる。 整数リテラルは int の範囲で表せる限り int なので 1 は int 。 int は整数拡張の必要がないので 1<<31 の結果の型も int 。 そして結果の型が signed かつ結果の値が結果の型で表現可能な範囲にないときの動作は未定義なので 2147483648 が int (おそらく質問者の環境では 32 ビット) の最大値である 2147483647 を越
えていて未定義の挙動となる。 不定とか処理系定義ではなく未定義と明記されてる。 つまり言語仕様上は何が起きても良いということ。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/371
372: デフォルトの名無しさん (ワッチョイ ffd6-G09H) [sage] 2024/11/25(月) 07:22:58.48 ID:NtppUMW10 6.3.1.3のこれじゃないの Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or subtracting one more than the maximum value that can be represented in the new type until the value is in the range of the new type. http://mevius.5ch.net/test/read.cgi/tech/1721137434/372
373: デフォルトの名無しさん (ワッチョイ bf5f-FO3g) [] 2024/11/25(月) 08:27:04.40 ID:qsrJNZhH0 6.3.1.3 符号付き整数型及び符号無し整数型 整数型の値を̲Bool型以外の他の整数型に変換する場合, その値が新しい型で表現可能なとき,値は変化しない。 新しい型で表現できない場合,新しい型が符号無し整数型であれば,新しい型で表現しうる最大の数に 1加えた数を加えること又は減じることを,新しい型の範囲に入るまで繰り返すことによって得られる値 に変換する(49)。 なるほど,1がintで<<31すると負の最大値となって,uns
ignedとして表せないからか. 皆様,ありがとうございました. http://mevius.5ch.net/test/read.cgi/tech/1721137434/373
374: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-hCSs) [sage] 2024/11/25(月) 09:22:18.85 ID:EAdMpn4b0 >>372-373 いいえ。 シフト演算の段階で既に未定義を踏んでいるので型変換は関係ないです。 6.5.7 をご覧ください。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/374
375: デフォルトの名無しさん (ワッチョイ 9fc2-ZGYG) [] 2024/11/25(月) 09:32:20.82 ID:SsaYg1Am0 科学 + ンニュース 5ch 保守派もリベラル派も「自分の政治的信念に合致したニュース」を信じやすいという研究結果 [すらいむ★] https://itest.5ch.net/egg/test/read.cgi/scienceplus/1732447647 コメントも含めて読むと 陰謀論が収まら無い理由が判明する http://mevius.5ch.net/test/read.cgi/tech/1721137434/375
376: デフォルトの名無しさん (ワッチョイ ffd6-G09H) [sage] 2024/11/25(月) 09:46:02.42 ID:NtppUMW10 なるほど、32bitのみでやるときも1u<<31にしないといけないのか http://mevius.5ch.net/test/read.cgi/tech/1721137434/376
377: デフォルトの名無しさん (ササクッテロ Spcb-8bf6) [sage] 2024/11/25(月) 10:29:04.22 ID:G+C3M6QHp なぜ浮動小数型をシフトしようとした? http://mevius.5ch.net/test/read.cgi/tech/1721137434/377
378: デフォルトの名無しさん (ワッチョイ bfdf-FO3g) [] 2024/11/25(月) 13:39:22.46 ID:YjGMGS1I0 >> 374 なるほど,そっちで既に未定義だったか. 6.5.7 ビット単位のシフト演算子 構文規則 シフト式: 加減式 シフト式 << 加減式 シフト式 >> 加減式 制約 各オペランドは,整数型をもたなければならない。 意味規則 整数拡張を各オペランドに適用する。結果の型は,左オペランドを拡張した後の型とする。右オペランドの値が負であるか,又は拡張した左オペランドの幅以上の場合,その動作は,未定義とする。 E1<<E2の結
果は,E1をE2ビット分左にシフトした値とする。空いたビットには0を詰める。E1が符号無し整数型をもつ場合,結果の値は,E1×2E2の,結果の型で表現可能な最大値より1大きい値を法と する剰余とする。E1が符号付き整数型と非負の値をもち,E1×2E2が結果の型で表現可能である場合,それが結果の値となる。それ以外の場合,その動作は未定義とする。 E1>>E2の結果は,E1をE2ビット分右にシフトした値とする。E1が符号無し整数型をもつ場合,又はE1が符号付き整数型と非負の値をもつ場合,結果の値は,E1/2E2の商の整数部分とする。E1が符号付き
整数型と負の値をもつ場合,結果の値は処理系定義とする。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/378
379: デフォルトの名無しさん (JP 0Hdf-6m00) [] 2024/11/26(火) 22:12:07.51 ID:JxXv+doZH VS CodeでEchoAPIを使うと、ツールを切り替えずにAPIテストをシームレスに管理できるようになったよ! http://mevius.5ch.net/test/read.cgi/tech/1721137434/379
380: デフォルトの名無しさん (ワッチョイ d761-7ouQ) [] 2024/11/29(金) 15:48:48.81 ID:QX01Nly20 以下のサンプルプログラムが理解できず困っています。 該当プログラムは、コマンドラインから読み込んだ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)->r
gbtBlue )) http://mevius.5ch.net/test/read.cgi/tech/1721137434/380
381: デフォルトの名無しさん (スプッッ Sd3f-G09H) [sage] 2024/11/29(金) 16:12:14.82 ID:YWo8X0edd bcBitCountはピクセルあたりビット数で1,4,8,24だそう nビットで表せる値は2^n通りで、これは左シフト1<<nで計算できる http://mevius.5ch.net/test/read.cgi/tech/1721137434/381
382: デフォルトの名無しさん (ワッチョイ ff76-J7R8) [] 2024/11/29(金) 23:08:43.43 ID:5pZynS2U0 # 質問されていない部分だけど… iCountと比較する値はループ内で変動しないよね? だったら毎回計算せずにループ前で計算して別変数に記憶しておくほうがよくないかい? http://mevius.5ch.net/test/read.cgi/tech/1721137434/382
383: デフォルトの名無しさん (ワッチョイ ffd6-G09H) [sage] 2024/11/30(土) 00:28:19.69 ID:b6kb1MmL0 今時のコンパイラは十分賢いので気にすることない http://mevius.5ch.net/test/read.cgi/tech/1721137434/383
384: デフォルトの名無しさん (ワッチョイ ff63-cdGy) [sage] 2024/11/30(土) 00:37:35.21 ID:VtvuoLT+0 ユーザーの犯したバグも直してくれるとありがたいなあ http://mevius.5ch.net/test/read.cgi/tech/1721137434/384
385: デフォルトの名無しさん (ワッチョイ ff76-J7R8) [sage] 2024/11/30(土) 00:47:56.34 ID:k7UOR52k0 シフトでも掛算でもどっちでもいいけど 質問者のように読んで悩むのは問題 コメント書いておけ ループ内毎回計算か最適化でループ外に出したかは コンパイル後の逆アセンブルとかで確認するの? だったら間違いないようにループ外に出す方が良い癖にもなると思うのだが http://mevius.5ch.net/test/read.cgi/tech/1721137434/385
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 617 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.018s