2012年4月16日月曜日

Androidのcharは符号なし


とりあえず、AtomicLaserをAndroidでコンパイルして動かしてみました。
写真は、デバッグ専用のタブレットで動かしたものですが、スマホでも問題無く動きます。


Windows→Android移植作業の過程で、Androidのプラットフォーム固有バグを、また発見。

どうも、AndroidのCでは、charが符号付き8bitの整数値ではないらしいです。
符号付き8bitの整数値同士の計算であれば良い(2の補数だからオーバフローにより期待値が得られる)けど、キャストして演算すると変な結果になってしまいます。

例えば、
------------------------------
char c = -1;
int i=0;
i+=c;
printf("%d\n",i);
------------------------------
という計算を行った場合の標準出力結果は、
Windows → -1
Android → 255
という風になります。

Linuxの仕様かも。
仕事でプログラムを組むときは、8bit符号整数は使わないので、詳しくは未調査です。
ゲームの場合、大量のデータを管理するとき、敢えて8bit符号整数を使う事がよく有りますが。(例えば、リプレイデータなんかの場合、処理効率よりもデータ量を少なくする事の方が重要だから、-128~127の範囲に収まる保存値は8bitで管理したりします)

これのお陰で、内部関数の仕様を大分変える必要がありました。。。
今の内に気付けただけでもラッキーと思っておくべきか。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

合理的ではないものを作りたい

ここ最近、実機版の東方VGSの開発が忙しくて、東方VGSの曲追加が滞っています。 東方VGS(実機版)のデザインを作りながら検討中。基本レトロUIベースですがシークバーはモダンに倣おうかな…とか pic.twitter.com/YOYprlDsYD — SUZUKI PLAN (...