• ベストアンサー

javaでunsignedは使えないのですか?

Eclipseを使い始めた初心者です。 short型変数を符号無しで宣言しようと思ったのですが、 赤の下線が出てしまってエラーの扱いになってしまっています。 javaではunsignedは使えないのでしょうか? 使えないのであれば、その理由と対処策を教えていただけましたら嬉しいです。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • bgbg
  • ベストアンサー率53% (94/175)
回答No.4

unsigned short などのような構文はありませんが、とりあえず負の値を使いたくないのなら char型を数値のように使えばよろしいかと思います。 char型のとりうる範囲は0~65535で、範囲外の数値はint型とみなされます(数値を直接代入する場合のみ)。 ただし負のintをcharにキャストすると上位ビットが欠落します。 char c; c = 0; c = 65535; c = 65536; ←コンパイルエラー c = -1; ←コンパイルエラー c = (char)-1; ←コンパイルエラーにはならないが65535になる

mika0602
質問者

お礼

対策方法を教えてくださってありがとうございました。 char型を使うのは全く考えていなかったのでとても参考になりました。 おかげで無事解決できました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.3

げ。。MAX 255って書いてるし。。。Orz 今まで私が作った過去のソースをあさってみたら、 基本的にはint で 0 から 65535 を使うようにしてあるんですが、 処理中で、0なら-32768 として処理する(32768のゲタをはかせる)ようにしたものもありました。 独自にUnsignedShortクラスを作ってますね。 きっと、最初の頃のソースなので、いろいろやってみたかったんでしょう(笑)<他人事か

mika0602
質問者

お礼

>独自にUnsignedShortクラスを作ってますね。 別途にクラスを作るとは考えもしていなかったので眼からウロコでした。 そこまで今回は手間をかけたくない部分でしたので今後の参考にさせていただきます。 ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

signedとunsignedの比較はバグを生む原因になりますし 例えばキャストについても unsigned short a = 65535; short b = (short)a; これをC/C++言語でやると普通bが-1になりますが、 2の補数とビットについて理解していなければ 何故そうなるのかわからないでしょう。 Javaはそもそもプラットフォーム間の差を無くす事と 複雑なC++を簡素化する事が設計の思想になっていたと思います。 処理系が必ず2の補数を使っているとも限らないわけですから unsignedを認めない設計になったのだと思います。 (認めると処理系が変わる事で結果が変わる可能性がでてくるので。) 既にある回答と被りますが shortではなくintを使い 0~65535であることをチェックするしかないでしょう。

mika0602
質問者

お礼

Javaの設計思想からご丁寧に教えてくださってありがとうございました。 ビットについては少し学んだのでbが-1になることは理解できました。 マイナスの値を取りたくなかっただけなのでチェックをするようにしてみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

JAVAにはunsignedはありません。 理由は言語仕様だからとしか答えようがありませんが、 「数値型は符号を持つ事が義務付けられている」からです。 義務付けられているので根本的な対策はありません。 int型を使って、MIN=0 MAX=255 と決めてその範囲であることをチェックするしか方法はないと思います。

mika0602
質問者

お礼

言語仕様として飲み込むのが正解なんですね。 使えないことがはっきりしてスッキリしました。 ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • unsignedの使い分け

    符号付き変数はバグを起こしやすいようですが、 負数を扱わない変数を全てunsignedにしていたら unsignedだらけになってしまう時がありますし、 実際、やたらにunsignedを付けるのは初心者だと言う人もいます。 みなさんはどのように使い分けているのでしょうか。 または、一般的にはどのように使い分けられていることが多いのでしょうか。 それから、CとC++では使い分けの傾向が違うのでしょうか。 よろしくお願いいたします。

  • newとunsignedについて

    初めまして. OS:windows XP ソフト:VisualStudio.net2003(C++) を使用してプログラミングをしています. (C++を始めて1ヶ月の初心者です) 動的配列を確保する上で,unsignedを使用する場合, unsigned short *Array = new unsigned short[size]; としているのですが,デバックをした際に妙な(ハングルなどの意味のない)文字列が配列ポインタの後についてしまいます. 心配になり, unsigned short *Array = (unsigned short *)new unsigned short[size]; としてみたのですが,それでもその文字列がポインタの後ろについてしまいます. これは問題がないのでしょうか? ご指摘願います. 追記:このあとで物理量から16bitバイナリーデータに変換する(D/A変換器の)関数でエラーがでており,このnewの使い方が怪しいと思ってます.

  • u_shortなどの省略した宣言について

    unsigned short A; のように長い型の変数の宣言を行う場合に u_short A; などと省略形で書いてあるのをたまに参考書などで見かけるのですが、 実際に省略形で宣言をすると `u_short' undeclared とエラーが出て使うことができません。 これはどうすれば省略した形で宣言できるのでしょうか? typedefで宣言すればできるのかと思い試行錯誤してみたのですができませんでした。 ご教授、宜しくお願いいたします。 環境 OS Fedora Core 2 言語 C

  • javaについて、char型に関する質問

    私プログラミングまったくの初心者であることを最初に断っておきます。 よって、なるべく噛み砕いた解説をお願いします。 javaの参考書で、「char型は文字1つ分の情報にあたります」 と書いてありました。 これはどういうことでしょうか? char型で宣言された変数は文字1つ分の情報しか入れられないということでしょうか?

    • ベストアンサー
    • Java
  • Javaの配列の宣言方法のメリット?

    1週間ほど前からJavaを独学している者です。 C言語をその前からやっていて、初心者レベル程度ならわかると思います。 そこで、質問です。 C言語の配列宣言:   int array[10]; Javaの配列宣言:   int array[] = new int[10]; 二つの言語とも、要素10個のarray1次元配列変数を宣言していると思います。 C言語の書き方はシンプルなので、納得がいきますが、Javaの方はどうしてこの形で宣言をするのかわかりません。(自分が言語製作者ならシンプルな書き方を採用します) だから、このような宣言の方法をとるということは何か理由があるのだと思います。 自分が思うところ、JavaはC言語より、柔軟で多機能だとおもうので、その影響で汎用性をますために、 長くなっているのかな~?と思っています。 こんごJavaの学習を進めていくと、例えば、   int array[] = new double[10]; //←エラーになりました みたいに型のちがう、宣言が出てきたりするのでしょうか? ちらっと、学習に使っている本をみたところ、動的配列の作成は別の操作で実現しているようなので、 「動的とは関係ないのかな?」と思っています。 長くなりましたが、Javaの配列宣言のメリットを教えてください。

    • ベストアンサー
    • Java
  • MicroC コンパイラ 変数宣言

    MicroC コンパイラ 変数宣言について質問です BYTE tmp1; WORD tmp2; なる定義があったとして 変数型範囲はどの範囲になるのでしょう 下記の定義は見つかったのですが 上記は分かりません 変数型 バイト数 範囲 (unsigned) char 1 0 .. 255 signed char 1 - 128 .. 127 (signed) short (int) 1 - 128 .. 127 unsigned short (int) 1 0 .. 255 (signed) int 2 -32768 .. 32767 unsigned (int) 2 0 .. 65535 (signed) long (int) 4 -2147483648 .. 2147483647 unsigned long (int) 4 0 .. 4294967295 float 4 ±1.17549435082 * 10-38 .. ±6.80564774407 * 1038 double 4 ±1.17549435082 * 10-38 .. ±6.80564774407 * 1038 long double 4 ±1.17549435082 * 10-38 .. ±6.80564774407 * 1038

  • java 問題

    public static void main(String[] args) { 1 文字列型変数 word をせんげんする String word = "abc"; 2  // 文字列型の変数が入る配列 words を宣言する   // 同時に、word から substring で取り出した文字をセットする Java初心者です。 2番が分かりません。どなたか解説していただけると助かります。

    • ベストアンサー
    • Java
  • JAVAとTomcatをインストールし直したらEclipse上から実行できなくなりました。

    超初心者です。JAVAとTomcatをインストールし直したらEclipse上から実行できなくなりました。JAVAもTomcatも単体では正しく実行されています。EclipseでのJAVA設定やTomcat設定は正しく行ったつもりなのですが、ブラウザからJSPを見れない状態です。error404 The requested resource is not availableと表示されます。よろしくお願い致します。

  • 「java.io.FileNotFoundException」について

    eclipseでJava開発をしています。 ある部分でプロパティの位置を指定して実行したところ、「java.io.FileNotFoundException」のエラーになります。 [メソッド]("propertiesの位置");でプロパティの位置を指定しているのですが、いくらやってもエラーになります。 初心者なので、プロパティをどこに置けばエラーがなくなるのかがよくわからないです。プロジェクト直下のWEB-INF内に置くのだと思うのですが違うのでしょうか? どなたか解決法をお願い致します。

  • JAVAでJfreeChartを用いたプログラムの実行

    JAVAでJfreeChartを用いたプログラムの実行 質問失礼します. 現在,javaでグラフを表示させるプログラムを作成しています. ○開発環境:eclipse3.5. ○JfreeChart:jfreechart-1.0.13.jar , jcommon-1.0.16.jar 実行に関しての質問なのですが, eclipseからの実行は問題ないのですが, コマンドプロンプトから実行を行うと以下のエラーが出てしまいます. Exception in thread "No.1]" java.lang.NoClassDefFoundError: org/jfree/data/general/PieDataset 環境変数の問題と自分なりに考えて設定を変えてみたりしたのですが,いまだに解決できない状態です. (環境変数あたりには詳しくないのでやり方がまずいのかもしれないですが...) わかる方いましたら回答よろしくお願いします.

    • ベストアンサー
    • Java
このQ&Aのポイント
  • BOSS DI-1を使用してミキサーへベースの音を出していますが、ライブの途中でダイレクトボックスの電源が落ちてしまいます。再度挿入すると電源が入ります。どこが問題なのでしょうか?
  • ダイレクトボックスのパワースイッチにはAUTOとONの2つがありますが、AUTOで使用しています。この状況で電源が落ちる問題が発生しています。
  • BOSS DI-1を使用してベースをミキサーへ繋いでいますが、ライブの途中でダイレクトボックスの電源が落ちてしまう問題が起きています。再度挿入すると電源が入るため、何が原因なのか不明です。
回答を見る