ãããªãããã®ãããåæ©çãªãã¹ãããããªãã®ã§ãããã¯ã¾ãä¸ã
a = 0xeeeeeeee;
b = a/2;
trace([b, b.toString(16)]);
b = Math.round(b);
trace([b, b.toString(16)]);
[output]
2004318071,77777777
2004318071,77777777
ç¹ã«åé¡ãªããã§ã端æ°ãã§ããã®ãMath.roundã§ä¸¸ãã¦ã¿ã
a = 0xffffffff;
b = a/2;
trace([b, b.toString(16)]);
b = Math.round(b);
trace([b, b.toString(16)]);
[output]
2147483647.5,7fffffff
2147483648,-(0000000
丸ããªãã®ã¯ã¾ãäºæ³éããä½è¨ãªè¦ªåå¿ã§ä¸¸ããçµæã®ãã®ã¯-(0000000ã¨ãªã£ãããã¼ã£ã¨ããã¯ä½ã ããï¼0x80000000ã ã¨æã£ãããããã ãã©ã使 ã«“(“ãªã®ã ããï¼ãªããåºæ¬çãª16鲿°ã®èãæ¹ãééã£ã¦ããã®ã ãããï¼é ãåããªãã»ã»ã»ã»ã
ã¤ãã§ã«ããä¸ã¤å¿µã®ãããä»ã«ç«¯æ°ã®åºãé¤ç®
a = 0x77777777;
b = a/2;
trace([typeof (b), b, b.toString(16)]);
b = Math.round(b);
trace([typeof (b), b, b.toString(16)]);
[output]
number,1002159035.5,3bbbbbbb
number,1002159036,3bbbbbbc
ç¹ã«ãããããªãããªãã»ã»ã»ï¼;´Ðï½ï¼
「16進数演算」への4件の返信
丸めとは関係なく、単純に int 型の最大値が2147483647なので
最上位ビットが符号ビットとして使われているだけだと思います。
ということは、アルファ情報は128階調になっちゃうのかな・・・
なるほど、そういうことですか・・
>int 型の最大値が2147483647
これが全然記憶に引っかかりませんでした・・・(;´Д`)
ということは0x7fffffffが上限になるのかしら?
intに上限あるならば、
HI、LOWと二つのint型変数をつくって、上位、下位をまたぐ計算ルーチンを作るってのはどうでしょう?
4bitとか8bitのマイコンではよく使ってました、こういう技。
めんどくさいですけど・・・
>4bitとか8bitのマイコンではよく使ってました、こういう技。
そ・・そうなのですかー。
プログラムって難しいなぁ・・・・・。勉強しなくては