- PR -

javaでの非負整数の表現

投稿者投稿内容
ひろ
会議室デビュー日: 2004/07/27
投稿数: 11
投稿日時: 2005-12-02 16:18
javaを始めたばかりで素人です。調べ方が悪いのか分からない事があります。
タイトルの通りですが、javaで非負整数を扱うにはどのような方法を取ればよいのでしょうか。

データをハッシュしたいのですが、そのハッシュ値が非負の値で欲しいですが、javaで用意されているものでは負の値が入ってしまいます。
自作しようとしても、非負の表現方法が分からないので困っています。

分かる方がいればぜひ、ご回答お願いします。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2005-12-02 16:29
整数で符号を意識するのは、大小比較( > , < など)と、乗算(*)や除算(/)だけであり、それ以外のビット演算や、等号での比較(=)や加算(+)や減算(-)は、符号は関係ありません。(もっとも理由はちょっと複雑で、加減算が負号を無視できるのは2の補数だからできるワザですが。)
ハッシュと言ってもいろいろありますが、あまり大小比較等はすることはないはずです。だから、普通に int などに値を入れておけば良いことが多いです。
ひろ
会議室デビュー日: 2004/07/27
投稿数: 11
投稿日時: 2005-12-02 16:43
unibon樣、さっそくの返信ありがとうございます。

私が今しようとしていることは、
「あるデータをハッシュ関数にかけて、そのハッシュ値をxとすると、あるバイナリデータのxバイト目のデータを処理する」
という事です。

だから負の数が出てくると困ってしまいます。
普通に使う分には符号は意識しなくていいのは分かりますが、この場合は非負の整数値が必要なのです。

やはりjavaで非負の数を扱うという事は難しいこのなのでしょうか。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2005-12-02 17:57
コード:
data.hashCode() >>> 1
data.hashCode() & Integer.MAX_VALUE


等のやり方でいけます。
ひろ
会議室デビュー日: 2004/07/27
投稿数: 11
投稿日時: 2005-12-02 18:35
あしゅ樣、ご返答ありがとうございます。

とても参考になりました。
そのようにすればいけますね。
思い浮かびませんでした。私もまだまだです。
本当にありがとうございました。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2005-12-02 21:09
引用:

あしゅさんの書き込み (2005-12-02 17:57) より:
コード:
data.hashCode() >>> 1
data.hashCode() & Integer.MAX_VALUE


等のやり方でいけます。


引用:

ひろさんの書き込み (2005-12-02 18:35) より:
とても参考になりました。
そのようにすればいけますね。


みなさん超能力者なの?
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2005-12-02 22:22
引用:

unibonさんの書き込み (2005-12-02 21:09) より:
みなさん超能力者なの?


ん・・・?なにか変ですか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-12-02 22:31
javaにはchar以外、unsigned(符号無し)な型がないですね。
ですので、負の数が現れる事を意識しなければいけません。

googleにて「2進数」と「符号」で検索して最初にヒットしたページです。
http://www.infonet.co.jp/ueyama/ip/binary/signedbin.html

何故負の数になるのか理解できると思います。

スキルアップ/キャリアアップ(JOB@IT)