C言語入門知識ポイント(の一部)

以下の内容のほとんどはBitTechのPeng兄弟からのものです。私はメモを取り、要約し、理解した後にそれを転載しました
元のリンクは書き込めませんので、元のリンクしか書けませんので、ご了承ください

  • 今のところカタログが手に入らないので、そのまま見ていきましょう。

文字列
文字要素のコレクション
も配列と見なされ、文字配列に格納されます。
文字列は「\ 0」で終わりますが、文字列の長さには含まれません。

char arr1 [] =“ 1bc”;
char arr2 [] = {'a'、 'b'、 'c'};
printf( "%s"、arr1);
printf( "%s"、arr2);

arr1は正常に印刷され、期待されるabcを取得しますarr2は
異常に印刷され、abcを取得しますが、文字化けした文字が後で表示される場合があります。
だが

arr3 {'a'、 'b'、c '、' \ 0 '}

arr1と同じ効果が得られます。
%sは文字列として出力されます。必要なのは、出力される文字列のアドレスです。%d、%c印刷とは異なります。
文字列は自動的に「\ 0」に追加されます。

エスケープ文字

\ ddd ----- dddは1〜3の8進数を意味します。
\ xdd ----- ddは、1〜2桁の16進数を意味します。

すべての文字(一部はキーボード上)はバイナリ形式でコンピューターに保存され、ASCIIコードと呼ばれる固有の10進変換コードがあります。

strlen()関数
は、文字列の長さをバイト単位で計算します。\ 0で終わります。
文字列にエスケープ文字がある場合は、それも文字としてカウントされます
。1。sizeof()キーワードを
使用して、オペランドタイプの長さをバイト単位で計算します。

ビット演算子

&ビット単位および

オペランド番号の2進ビットを操作します。

int a=5;
int b=3;
a----0101
      &
b----0011
---->0001  

2進数では、両方が1の場合にのみ、1にすることができます。
&&と同様に、2つのtrueが真で、falseが偽です。
2進数の2桁が0である限り、0です。すべて1にしてください。

|ビットごとのOR

int a=5;
int b=3;
a----0101
      |1
b----0011
---->0111

2進数では、そのうちの1つが1である限り、結果はすべて1であり、すべてが0の場合にのみ、0を取得でき
ます。||と同様に、trueの場合はtrue、falseの場合はすべてfalseがあります。

^ビット単位のXOR

int a=5;
int b=3;
a----0101
      &
b----0011
---->0110

2進ビットでは、2ビットのみが同じで0であり、2ビットが異なる場合は1です。
ビットの数が同じである限り、両方が1であっても、結果は0になります。

〜ビット単位の否定

int a=5;
a-----0101
~a----1010

数値の2進数をすべて取得します
。0–> 1
1–> 0
は、次のような判断条件でも使用できます。

while(~scanf("%d",&a))
{
    
    }

コンピューターでは、入力が間違っていると、要件が満たされません。EOFを返します。つまり、戻り値は-1です。

-1
原码:10000000 00000000 00000000 00000001
反码:11111111 11111111 11111111 11111110
补码:11111111 11111111 11111111 11111111

次に、符号ビットを含む補数コードのすべてのビットを反転します

取反后补码:00000000 00000000 00000000 0000000

符号ビットは0です。これは正の数であることを意味し、元の拒否は正の数でも同じです。0を返します。

while(0)条件が偽の場合、ループは終了

、while(Scanf( "%D"、&A)!= EOF)
{}
でも同じ効果が得られます。

シフト演算子

 >><<
>位移位运算符

<<左シフト
->>右シフト
これらの2つの演算子は、数値に作用するバイナリ形式です。

unsigned int a=4;
int b=-4;
printf("%d",a<<2);
printf("%d",b<<2);

正の数と負の数の場合、メモリ内の演算はすべて補数の形で実行されることは誰もが知っています。正の数の補数は元のコードです。

元のコード->逆コード->補完コード

a
原码:00000000 00000000 00000000 00000100
反码:00000000 00000000 00000000 00000100
补码:00000000 00000000 00000000 00000100
b
原码:10000000 00000000 00000000 00000100
反码:11111111 11111111 11111111 11111011
补码:11111111 11111111 11111111 11111100

次に
変位aを左に移動し、右にゼロを追加します。

a<<2
00000000 00000000 00000000 00010000

結果は4 *(2 ^ 2)= 16です。

b>>2
补码:11111111 11111111 11111111 11111111
反码:11111111 11111111 11111111 11111110
原码:10000000 00000000 00000000 00000001

補数コードは右にシフトされます。負の数であるため、最上位ビットは1で補われ、1を減算した後、逆数コードに変換されて逆になりますが、最上位ビットは残ります。 1で変更なし。
結果は(-4)/(2 ^ 2)=-1です。

この意味で、シフト演算子<<左シフトは、数値(2 ^シフト数)を乗算します。
->>右にシフト、数/(2 ^変位の数)。

単項演算子

論理的逆

int a=!3;
int b=!0;

結果は

a = 0;
b = 1;

!(論理負)はtrue(ゼロ以外)をfalse(0)に変更でき、falseをtrue(1)に変更できます。

a ++
++
a a–
–a

前のシンボル

-
++ aは
最初に増加、減少し、次に使用します

後ろのシンボル

a– a
++が
最初に使用され、次に増加および減少します

int a=5;
int b=a++
int c=5;
int d=++c

結果は

a = 6
b = 5
c = 6
d = 6

三項演算子


条件を分析しますか?結果1:結果2
判定条件が真の場合、戻り値は結果1になり、偽の場合、戻り値は結果2になります。

a>b?10:5

a> bの場合は10を返し、a <= bの場合は5を返します。

コンマ演算子

int a=(2,3,4,5,6);

a == 6、コンマ演算子では、aは最後の式の値のみになります。

コンテンツはXi'anHonor BitTechnologyのBitpengからのものです。
ブログは私の記憶と理解を深めることです。
元のリンクは書き込めませんので、元のリンクしか書けませんので、ご了承ください

おすすめ

転載: blog.csdn.net/weixin_52199109/article/details/112546228