今回は備忘録として記事にしました。スポンサーリンクfloat型以外のビット演算andを使った符号反転の方法float以外のint型であれば、最上位のビットが符号用ビットとなっている2の補数となっているので、1バイトの変数でビット操作で符号判別と符号を正の値に直すことが出来ます。1となり、if文に入ります。最上位ビットのみをマスク、0にします。AM2321の気温がマイナスの時の判別も、この方法で行っていました。ビット演算が使えないfloat型の符号反転の方法float型(浮動小数点数型)は4バイトの変数で小数点以下も計算出来るのが特徴。Wikipedia浮動小数点数型と誤差4バイトなので0x80000000でマスクして0x7FFFFFFFで反転出来ると思っていましたが、ダメでした。何度やってもコンパイルエラーが出るので調べたらなんと、float型の変数にはビット演算が使えない様です。共同体を使えば、float型に直接ではなく、間接的に代入する事が出来るみたいです。浮動小数点型でビット演算ただ、符号反転の為ならわざわざ共同体を使ってまでビット演算をしなくても良いみたいです。なんと、普通の計算式で符号反転させる方法がありました。-1;そう、マイナス1を掛ければ符号が反転します。1このままだと正の値まで反転されてしまうので以下の様にします。-1;}これで、0.00以下になった場合は、値が反転される様になりました!まとめC言語には色々な変数型があるので少し面倒ですがアセンブラで書く事を考えたらかなり楽です。プログラムは楽になりますが、プログラムメモリとの戦いにはなります。コンパイルログにはこんな文があります。information.PROモードでコンパイルすれば40%フリーモードより削減できますよ、との内容です。ちなみに、現在プログラム中の気圧計はプログラムメモリ99.7%使用と致命的な状態です。XC8のPRO版は13万円もするので個人の趣味の用途では無いので大きなプログラムを書くならArduinoの方が良いのかもしれません。ちなみにXC8のスタンダード版は約7万円です!Arduinoもライブラリを入れすぎると容量がヤバイです。