質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Q&A

解決済

3回答

10184閲覧

C言語 gcc unsigned long に負の数を代入したとき、代入した値を10進数表記が負の数になるのはなぜ?

yuyu77

総合スコア11

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

0グッド

0クリップ

投稿2019/06/25 06:56

前提・実現したいこと

unsigned long に負の数を代入した際
10進数表記の値は正の数で表示される。

発生している問題・エラーメッセージ

unsigned long B = -561;
printf("B = %x\n",b);
printf("B = %d\n",B);

実行結果
B = 0xFFFFFDCF
B = -561 ※ここは 4294966735 ではないのか???

該当のソースコード

unsigned long B = -561;
printf("B = %x\n",b);
printf("B = %d\n",B);

試したこと

◆直接 0xFFFFFDCF を代入し実行

unsigned long B = 0xFFFFFDCF; printf("B = %d\n",B);

>実行結果   B = -561

◆unsigned short BBに 0xFDCF を代入。

unsigned short BB = 0xFDCF; printf("BB = %d\n",BB);

>実行結果   BB = 64975

上記二つの違いがでる理由がわからない。

補足情報(FW/ツールのバージョンなど)

windows 7 のコマンドプロンプトにて GCC で実行しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

書式文字列で%dというのは、引数をintとして解釈して表示します。
unsignedの(つもりの)引数なら、%u、unsigned long なら、%lu としましょう

投稿2019/06/25 07:01

編集2019/06/25 07:02
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2019/06/25 07:03

最初のが&dになってますね
y_waiwai

2019/06/25 07:05

気がついたんで修正しました
guest

0

printf("B = %d\n",B);となっていますが、%dと書くと符号付き整数と解釈されます。符号なし整数として処理したい場合は、%uが適切です。

投稿2019/06/25 07:00

編集2019/06/25 07:01
maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2019/06/25 07:05

「unsigned short BBに 0xFDCF を代入」の場合、printfに渡す過程で汎整数拡張という変換が入って、実際に渡される時点ではsigned intとなっています。
yuyu77

2019/06/25 07:09

ありがとうございます。 その部分がどうしてもわからなかったので勉強になりました!!!
guest

0

ベストアンサー

printf の書式をきちんと確認してください。

https://www.k-cube.co.jp/wakaba/server/format.html

%u , %lu というのがありますよね?

投稿2019/06/25 06:59

編集2019/06/25 07:00
mather

総合スコア6753

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuyu77

2019/06/25 07:01

指摘ありがとうございます。 %ldに変更しましたが、結果は同じでした。 勉強不足ですみません。
mather

2019/06/25 07:04

回答をちゃんと最後まで読んでください。
yuyu77

2019/06/25 07:06

ありがとうございます。 表示されました。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問