ホームページ >バックエンド開発 >C++ >Unsigned Char 値を出力するときに「cout」が誤動作するのはなぜですか?

Unsigned Char 値を出力するときに「cout」が誤動作するのはなぜですか?

DDD
DDDオリジナル
2024-11-26 21:16:16445ブラウズ

Why Does `cout` Misbehave When Printing Unsigned Char Values?

cout の不正動作: unsigned char 出力が混乱を引き起こす理由

プログラミングにおいて、cout 関数を使用して unsigned char 値を出力すると、予期しない結果が生じることがあります。問題を詳しく調べて、なぜこの問題が発生するのかを調べてみましょう。

問題の説明

次のコード スニペットを考えてみましょう:

#include<iostream>
#include<stdio.h>

using namespace std;

main() {
    unsigned char a;
    a=1;
    printf("%d", a);
    cout<<a;
}

このコードを実行すると、1 の後にいくつかのメッセージが出力されます。一見ランダムなキャラクター。しかし、出力はなぜこのように動作するのでしょうか?

回答

この混乱は、ASCII 値 1 に対応する文字に起因します。この文字は印刷不可能な制御文字であり、通常は表示時に表示されません。テキストとして。その結果、cout はそれをガベージとして出力します。これを確認するには、isprint 関数を使用して、文字が印刷可能かどうかを確認できます。

std::cout << std::isprint(a) << std::endl;

これは、文字が印刷不可能であることを示す 0 (false) を出力します。

問題を修正して printf と cout の両方に値 1 を表示するには、unsigned char を unsigned にキャストします。整数:

cout << static_cast<unsigned>(a) << std::endl;

以上がUnsigned Char 値を出力するときに「cout」が誤動作するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。