[C言語入門] 演算子の使い方(5)
高木です。こんばんは。
なかなか先は長そうですが、前回の続きです。
もしかすると、うっかり間違っている箇所があるかもしれませんので、何か気づかれた場合はコメント欄に書き込むなどして教えていただければ幸いです。
単項算術演算子
単項算術演算子は、単項+演算子、単項-演算子、~演算子、!演算子の4種類があります。
二項の+演算子(加算演算子)や-演算子(減算演算子)もあるので注意してください。
単項+演算子と単項-演算子のオペランドは算術型でなければなりません。
算術型というのは、整数型と浮動小数点型の総称です。
浮動小数点型は実浮動小数点型(float型、double型、long double型)と複素数型(double _Complex型など)の総称です。
単項+演算子の評価結果はオペランドの値になります。
ただし、オペランドが整数型の場合は整数拡張が行われます。
整数拡張については後日解説できれば考えていますが、早く知りたい方は「整数拡張」または「汎整数拡張」で検索してみてください。
単項-演算子の評価結果は、オペランドの符合を反転した値になります。
ただし、オペランドが整数型の場合は、整数拡張を行ったあとで符合の反転が行われます。
これは2の補数と合致します。
単項~演算子のオペランドは整数型でなければなりません。
評価結果は、整数拡張したオペランドをビット単位で反転した値になります。
オペランドが符合無し整数型の場合は、1の補数になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 | unsigned int E = 0x12345678; printf("%#x\n", -E); printf("%#x\n", ~E + 1); // 2の補数 printf("%#x\n", ~E); printf("%#x\n", -E - 1); // 1の補数 /* 実行結果(unsigned int型が32ビットの場合) 0xedcba988 0xedcba988 0xedcba987 0xedcba987 */ |
論理否定演算子(=!演算子)のオペランドはスカラ型でなければなりません。
スカラ型というのは、算術型とポインタ型の総称です。
評価結果の型はint型で、オペランドがゼロに評価される場合は1、そうでなければ0になります。
まだまだ、このネタは続きそうです。
なにしろ、まだ単項演算子が終わっていませんから。
次回はsizeof演算子と_Alignof演算子を紹介することにします。