ホームページ >バックエンド開発 >C++ >C で `cout` が符号なし文字を正しく出力しないのはなぜですか?

C で `cout` が符号なし文字を正しく出力しないのはなぜですか?

DDD
DDDオリジナル
2024-11-27 06:01:08130ブラウズ

Why Doesn't `cout` Print Unsigned Characters Correctly in C  ?

cout 符号なし文字の印刷に失敗する: 問題の解決

C では、cout が符号なし文字を印刷できないという問題が頻繁に発生します。これを理解するために、提供されているコード例を分析してみましょう。

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

using namespace std;

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

このコードでは、unsigned char 変数 a に値 1 が割り当てられます。printf を使用して a を出力すると、結果は「1」になります。ただし、 cout << を使用した出力はa は、一見ランダムな文字を表示します。

この不一致の理由は、unsigned char が 0 から 255 までの値を格納できるためです。a が 1 の場合、それは印刷不可能な ASCII 文字「SOH」(先頭の文字)に対応します。見出し)。 printf は、印刷不可能な文字を cout とは異なる方法で処理します。

文字が印刷可能かどうかを判断するには、std::isprint 関数を使用します。

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

これは、次のことを示す "0" を出力します。 'SOH' は印刷できません。

cout に 1 を強制的に出力するには、 a を unsigned にキャストします。 integer:

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

これは "1" を正常に出力します。

この問題を解決するには、印刷不可能な文字の処理における printf と cout の基本的な違いを理解することが重要です。さらに、 std::isprint は、文字を人間が読める形式で印刷するかどうかを決定するのに役立ちます。

以上がC で `cout` が符号なし文字を正しく出力しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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