![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_01.png?e8efa67)
C言語初心者です。
今作っているプログラムで、データを16進形式で表示しようとしています。
大体このような感じです。
/*入力時*/
char buf[5]={0x4e,0x94,0xa0,0x2b,0x78}
/*出力時*/
for (i = 0; i < 5; i++) {
printf("0x%02x\n",buf[i])
}
実際には入力後にある処理によってbufは更新されるのですが、printfの出力結果として、
0xffffff4e
0x94
0xffffffa0
0x2b
0x78
というように、'ffffff'が付加したものがいくつか出力されてしまいます。
これはどういった意味を持つのでしょうか?
なんか初心者ならではの漠然とした質問ですいません。。。
No.2ベストアンサー
- 回答日時:
出力は、
0x4e
0xffffff94
0xffffffa0
0x2b
0x78
ではありませんか?
char が符号付(-128~127)のため、0x80~0xffは負の数とみなされます。printfの引数になる時に 符号付charは符号付intに変換されますが、このCコンパイラの場合は、int が4バイトcharが1バイトのため、上位3バイトに負の数を示すffffffが入ります。
char x=255;
printf("%d\n",x);
だと255でなく、-1が表示されます。
対応としては、
unsingned char buf[5]={0x4e,0x94,0xa0,0x2b,0x78}
;
とするか、
printf("0x%02x\n",buf[i]&0xff);
にするかどちらかですね。
回答ありがとうございます。
質問時に適当なイメージで出力値にffffffを付加してましたが、実際には0x80~0xff
のみそうなるんですね。
>このCコンパイラの場合は、int が4バイトcharが1バイトのため、
>上位3バイトに負の数を示すffffffが入ります。
これまたとても参考になります。
そういえばコンパイルの際にそういうワーニングが出ていたような・・・。
みなさん、ご親切に本当にありがとうございました。
No.1
- 回答日時:
家の環境では出力は
0x4e
0xffffff94
0xffffffa0
0x2b
0x78
となりました。
ffffffの意味は、それが負の数であることを表しています。
2進数で負の数を表すための2の補数表現について調べてみてください。
ffffffを表示したくない場合は
unsigned char buf[5];
とするか、
printf("0x%02x\n",buf[i] & 0xff);
とすればいいと思います。
参考URL:http://www.google.com/search?num=50&lr=lang_ja&q …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Visual Basic(VBA) 空白のセルを変更しようとした時(アクティブセル)に インプットボックスを5回出す インプットボックス 1 2023/03/14 11:01
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
char*を初期化したいのですが
C言語・C++・C#
-
charでの計算?
C言語・C++・C#
-
printf で二進表示を行いたい。
C言語・C++・C#
-
-
4
C言語で構造体のメンバを簡単に出力する方法ありますか?
C言語・C++・C#
-
5
C言語 配列の長さの上限
C言語・C++・C#
-
6
0xffffとは?
C言語・C++・C#
-
7
unsigned long long 型のフォーマット指定子
C言語・C++・C#
-
8
2の補数を計算するプログラム
C言語・C++・C#
-
9
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
10
unsigned char配列への入力の仕方
C言語・C++・C#
-
11
バッファとは何ですか
C言語・C++・C#
-
12
C言語での引数の省略方法
C言語・C++・C#
-
13
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
14
C言語のsocket関数で、複数NIC実装PCはどうなるのでしょうか?
C言語・C++・C#
-
15
構造体のメンバをfor文で回したい
C言語・C++・C#
-
16
void*型のデータサイズ
C言語・C++・C#
-
17
UpdateData( FALSE); による文字列データの表示更新(VC++6.0)
C言語・C++・C#
-
18
C言語のポインターに関する警告
C言語・C++・C#
-
19
#defineの定数を文字列として読み込む
C言語・C++・C#
-
20
C++ 文字列変数と16進数の比較
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
C言語でファイルから複素数の値...
-
受信データから必要な部分のみ...
-
2進数の表示
-
矢印キーを押下してコンソール...
-
文字列を分解して特定の項目を...
-
【C言語】全角文字の配列を、全...
-
プログラムの実行時に'<'でリダ...
-
信頼区間の1.96や1.65ってどこ...
-
複数桁10進数の*桁目だけを抽出...
-
数学 確率変数Xは、X=2またはX...
-
反転した数値を表示させるやり方
-
2÷3などの余りについて
-
中学生で数学です。 √84nが自然...
-
「Aに対するBの割合」と「Aに対...
-
ボール同士の衝突
-
std::set<int> で、ある値が何...
-
変数とパラメータとは違うもの...
-
漢字のソートについて
-
charでの計算?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
C言語で複数列のデータを1列の...
-
printf による16進表示について
-
C言語のプログラムで、途中で止...
-
char型2つを結合し、short型に...
-
矢印キーを押下してコンソール...
-
#defineが使用するメモリ領域に...
-
【C言語】全角文字の配列を、全...
-
終了条件Ctrl+zについて,結果表...
-
空白を含んだ文字列がうまく格...
-
プログラミングの授業の課題です
-
リストの作成と出力(C言語)
-
c言語で文書を読み込み、単語の...
-
構造体メンバの初期化
-
エラーについて質問です。
-
reallocでエラー
-
C言語でのCSVファイルの読み出...
-
なぜ無限ループになるかが分か...
-
Cプログラムについて
-
C++で指定文字列のカウント方法...
おすすめ情報