C++個人疑問集

7947 ワード

C++個人疑問集
  • 十進法浮動小数点数のバイナリ記憶方式及び変換
  • cerr、cout、clogの違い
  • cerrとclogの使用シーン
  • c++typedefの使用シーン
  • JavaとC++のメンバーとクラスのデフォルトアクセス修飾子?

  • 十進法浮動小数点数のバイナリ記憶方式及び変換
    V = (-1)s×M×2E
  • (-1)sはシンボルビットを表し、s=0、Vが正数である場合.s=1の場合、Vは負の
  • である
  • Mは有効数字を表し、1以上2
  • 未満である.
  • 2 Eは指数
  • を表す.
    例えば、十進法178.125をマシン内の32バイトのバイナリ形式として表す
  • 第1ステップ:178.125をバイナリ数:(178.125)(10進数)=(10110010.001)(バイナリ形式)として表す.10進整数から2進整数への変換:2を除いて残り、逆順配列10進小数から2進小数への変換:2を乗じて整数を取り、
  • を順番に並べます.
  • 第2歩:バイナリ形式の浮動小数点の実数を正規化の形式に変換する:(小数点を左に7つのバイナリビットを移動して得ることができる)10110010.001=1.0110010001*27は、以下の3つの項目を生成した.
  • シンボルビット:この数は正数であるため、31ビット目は0であり、1つのバイナリビット
  • を占める.
  • 次符号:指数は7であるため、その次符号は127+7=134=(100000110)(バイナリ)であり、30から23までの8つのバイナリビット
  • を占める.
  • 端数:小数点以下の部分、すなわち011001001001.末尾の23個のバイナリビットのため、後に13個の0を補う、すなわち0110010000000000

  • したがって、178.125のメモリでの実際の表示方法は、0|100000110|0110010000000000000
    cerr、cout、clogの違い
  • cout:標準出力ストリーム、通常出力用、入力読み込みバッファ、リフレッシュバッファ動作トリガ時に出力バッファ内容を端末ディスプレイに出力したり、ディスクファイル
  • にリダイレクト出力したりすることができる.
  • cerr:非バッファの標準エラーストリームで、エラー情報を表示するために使用され、エラー情報はバッファに入力されず、端末ディスプレイに直接表示され、一般的には
  • にリダイレクトされない.
  • clog:バッファの標準エラーストリーム、一般的に実行ログを記録するために使用され、ログメッセージはバッファに読み込まれ、バッファのリフレッシュ動作をトリガするとバッファ内容を端末ディスプレイに出力し、一般的にはログファイルtipにリダイレクト出力することができる:異なる操作環境定義の異なる
  • にリダイレクト出力する.
    バッファの役割:コンピュータのバッファに対する操作はディスクの操作より速く、コンピュータのディスクに対する読み書き回数を減らし、低速の入出力装置と高速のCPUの間で協調作業を行うことができる.
    バッファのリフレッシュをトリガーするアクション:
  • バッファ満杯時
  • flush文
  • を実行する
  • 行バッファ時にendlに遭遇し、cerrまたはcin時
  • ファイル
  • を閉じる
    cerrとclogの使用シーン
  • clog:clogはバッファ出力、cerrはバッファレス出力である、バッファ出力は通常バッファレスよりも効率が高いため、記録ログはclog
  • を用いるのが一般的である.
  • cerr:clogはバッファ出力であるため、プログラムがクラッシュした場合、すべてのログ情報およびエラー情報がclogを使用して出力される場合、プログラムクラッシュによるバッファ損失の可能性があるため、すべての情報が表示されない可能性があります.したがって、cerrを用いるエラー情報を出力するのが一般的であり、プログラムがクラッシュした場合、cerrがバッファレス出力であるため、バッファ損失による情報の欠落は発生しない
  • .
    c++typedefの使用シーン
  • 定義タイプの別名(区分#defineのマクロ置換)例:
  • typedef char *pStr1;
    #define pStr2 char *;
    pStr1 s1, s2;		//s1,s2 char*  
    pStr2 s3, s4;		//s3 char*  ,s4 char  
    

    注意:#defineが行うマクロ置換は簡単なreplace操作と似ており、typedefは新しいタイプを定義することに相当し、コンパイラがコンパイルするとtypedefが定義したタイプを新しいタイプと認定します.詳細は以下の例を参照してください.
    typedef char* pStr;
    #define pStr1 char* ;
    const char* p1 = "hello";
    const pStr p2 = "hello";
    const pStr1 p3 = "hello";
    p1++;//  ,        
    p2++;//  ,   pStr         ,      
    p3++;//  ,#define           ,pStr1      
    
  • 定義struct構造体別名例:
  • typedef struct tagPOINT  
    {  
        int x;  
        int y;  
    }POINT;  
    POINT p1; 		//   struct
    
  • 定義マルチプラットフォーム応用タイプ例:浮動小数点タイプをREALと定義し、typedefを修正するだけで複数のプラットフォームでREALを使用して浮動小数点タイプ変数プラットフォームを定義することができるlongとdoubleタイプをサポートする:typedef long double REAL;プラットフォーム2はlongタイプをサポートする:typedef long REAL;プラットフォーム3 longとdoubleタイプはサポートされていません:typedef float REAL;注意:typedefはstaticやregisterなどのストレージクラスキーワードと同じであるため、1行のtypedef宣言に他のストレージクラスキーワード(コンパイルエラー:typedef static int A;)
  • は表示されません.
  • 複雑な変数宣言の簡略化例:
  • #include
    using namespace std;
    typedef int A(char a,char b);	//    A,    char    ,  int   
    
    class X{
    	public:A(fun);	//    ,   int fun(char a,char b);
    };
    
    int X::fun(char a,char b){
    	cout<<"succcess"<<endl;
    	return 0;
    }
    
    int main()
    {
        X *xx;
    	xx->fun('a','b');
        return 0;
    }
    

    JavaとC++のメンバーとクラスのデフォルトアクセス修飾子?
  • Java:インタフェースのデフォルトの修飾子はpublicです.クラスのデフォルト修飾子はdefault(パッケージ全体にアクセス可能)
  • です.
  • C+:クラスのデフォルト修飾子はprivate(変数または関数はクラスの外部にアクセスできません)であり、structではpublic
  • です.
    才学疎浅、評論指導を歓迎する
    私の個人的な小さな駅へようこそ:www.wengjj.ink