「トラップ」のこの道C言語のタイトルは、基礎は良くないですセットに簡単です!

1、

今日のコードを理解するには少しの知識の埋蔵が必要です。

2、

タイトルと分析

いくつかの単語の男は、コードに言いました:

あなたは結果を何を作るのですか?

推定結果のほとんどは、友人に計算されている 

予備分析

大体このコードを分析し、私たちは見てみましょう、コードは、知識が調べ二つの点で見つけることができます:

まず、データ型変換

第二優先課題演算子

この線の上、 - 最高の優先順位、第肯定をビット単位を行い、その後、+優先度の高い、SO 4 + 1 = 5の実装、及び最終的に右シフト演算を行います。

従って、上記のコードは、と等価です。

すなわち、まず、ビット単位の否定、~~ = 0xA5の(1010 0101B)= 0101 1010B = 0x5A

図5は、右を0x2を得ました。結果は2を計算していますか?

私たちが直接結果を確認するためのコードを実行してみましょう:

それはどのように?答えは250に急に等しい2、Bに期待されていません!これはなぜでしょうか?

暗黙的なデータ型変換と、整数の価値を高めます

さんが見つけ、このコード行以上詳しく見てみましょう、異なる種類の間に操作があったデータ型は、charで、データ型は、4と1を指定されていない場合、C言語のコンパイラはint型にそれをデフォルトになります:

私は、我々はすべて知っていると信じていた場合、C言語での動作中に文字データ型の両側に一貫性のない操作は、コンパイラがします、自動的に暗黙的なデータ型変換可能

全体的に、このデータ型変換はより複雑であるが、一般的に、この原則に従ってください:データ精度の回避損失を

平均上記の原則は何ですか?

シンボル側のオペレータ一貫性のないデータ型ならば、コンパイラは常に、より広いデータ型を変換してみてください。

計算プロセスの数がfloatでない場合、彼らは確かに整数であり、コンパイラはint型にintデータ型のプロモーションの幅が、「として知られている現象よりも、すべての一般的に小さい値全体のアップグレード

 

さらなる分析

私たちは、のは、再びコードの先頭行を見てみましょうアップグレードの全体の価値を知っています:

unsigned char型で、int型は、より少ないデータ幅よりもあるので、コンパイラは前にビット演算を実行するために、最初のデータ型intに増加します。

異なるマシン、int型の異なるデータ幅で、私のマシンのサイズにintが4バイトです。

したがって、データの型変換、= 0X 00 00 00 A5は 、 〜A = 0X FF FF FF 5(a)の後にビット単位であり 、 得られる、右ビット5(MSBが0オートコンプリート)を押し0x07のFF FF FAデータ・タイプがBチャーであるため、時間多重化に数値でbは、1バイトのみが、このように発生したデータの切り捨て、保存のみ最下位バイト、すなわち0xfa = 250。

 

概要

暗黙的なデータ型変換C言語が精通していない場合は、この問題によって、私たちは、見つけることができる、それがセットに簡単です。

また、演算子の優先順位は、提案は明らかにまだ括弧と実行の順序で、覚えるのが非常に困難です

   プログラミングを愛する人のために、小さな学習パートナーのグループと一緒にその答えは非常に重要です!私はプログラミングのゼロベースの交換クラブ(学ぶために始めているグループ)だけでなく、学習のビデオファイルを、歓迎初心者をしているし、少しの友人に前進します!

公開された520元の記事 ウォンの賞賛132 ・は 80000 +を見て

おすすめ

転載: blog.csdn.net/HUYA69/article/details/105292754