JNIを使って、CとJavaをつなごうとしている。
C側でuint64_tを使っている箇所があるので、Javaで何とかしなくてはならん。
Javaのlongは64bitなのだが、Javaにはunsignedがないので、たぶん最上位ビットが立ってたら負の数と思うだろう。
byteもそうだったし。
確認しておくべし。
longだけではなく、BigDecimalも使ってみよう。
同じようなことをさせたいが、BigDecimalにビットシフトがないので、割り算で代用。
処理が遅くなりそうだが、まあ動作確認だからな。
結果
big decimal 2byte: fe
long 2byte: fffffffffffffffe
やはり、そうなるのか。
BigDecimalは演算してるから2byte分きっちりになったが、longはビットシフトで符号が引きずられたんだ。
そういえば、Javaには「>>>」があったな。
結果
big decimal 2byte: fe
long 2byte: fe
おお!
なんか、うれしくなりますな。
これはHEXで出しているから、変数として正負どちらになっているかわからん。
数字で出力させて確認。
BigDecimal : 正
longで>>:負
longで>>>:正
まあ、予想通りか。
当然だが、これをbyte型にキャストして代入すると、どれも負の数になる。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。