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になる
対策方法を教えてくださってありがとうございました。
char型を使うのは全く考えていなかったのでとても参考になりました。
おかげで無事解決できました。
ありがとうございました。
No.3
- 回答日時:
げ。
。MAX 255って書いてるし。。。Orz今まで私が作った過去のソースをあさってみたら、
基本的にはint で 0 から 65535 を使うようにしてあるんですが、
処理中で、0なら-32768 として処理する(32768のゲタをはかせる)ようにしたものもありました。
独自にUnsignedShortクラスを作ってますね。
きっと、最初の頃のソースなので、いろいろやってみたかったんでしょう(笑)<他人事か
>独自にUnsignedShortクラスを作ってますね。
別途にクラスを作るとは考えもしていなかったので眼からウロコでした。
そこまで今回は手間をかけたくない部分でしたので今後の参考にさせていただきます。
ご回答ありがとうございました。
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であることをチェックするしかないでしょう。
Javaの設計思想からご丁寧に教えてくださってありがとうございました。
ビットについては少し学んだのでbが-1になることは理解できました。
マイナスの値を取りたくなかっただけなのでチェックをするようにしてみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java dokojavaのコンパイルについて 1 2022/10/06 18:42
- IT・エンジニアリング c言語とjavaの需要について 3 2022/06/23 22:59
- オンラインゲーム とても急いでいます。Minecraft Java版についてです。 MinecraftのJava版でマ 1 2023/03/15 21:19
- Java JavaでWebページ作成 7 2023/07/21 21:09
- Excel(エクセル) INDEX関数とMATCH関数を使用し値を返す数式についてです 2 2022/04/20 13:40
- その他(住宅・住まい) 換気口に鳥 3 2022/05/16 00:07
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- ノートパソコン ダヴィンチリゾルブ Davinci Resolve 未対応のgpu処理モードというエラー 1 2022/09/06 18:00
- Excel(エクセル) 何故割り算なのでしょうか? 6 2022/11/09 13:30
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
c++ 文字列を入力して、一文字...
-
干支のプログラム
-
【C言語】文字型と整数型の違い
-
構造体の各メンバにfor文からア...
-
文字列から空白を取り除きたい...
-
Linuxでフォルダ内全ファイル名...
-
charからLPTSTRへの変換方法
-
switch文で文字を比較すること...
-
分割した単語の頻出頻度を表示...
-
'const char *' 型は 'char *' ...
-
コンパイルエラー invalid ope...
-
配列をnビットシフトする
-
int main()の・・・
-
pingの結果を取得する方法
-
C言語エラーについて
-
2曲同時再生するにはどうした...
-
16進数関数のhex関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
'const char *' 型は 'char *' ...
-
型変換
-
テキストデータをそのままバイ...
-
文字列から空白を取り除きたい...
-
CStringをwchar_tに変換したい
-
絶対パスからのファイル名の切...
-
fgetsなどのときのstdinのバッ...
-
ネットワークにつながっている...
-
str系関数を使わずに二つの文字...
-
3桁区切(コンマ)記号をつけ...
-
atoi( ) の反対をやりたい
-
double型の値をchar配列に変換...
-
C言語のfor文です。 繰り返しの...
-
switch文で文字を比較すること...
-
ファイル名である文字列からbas...
-
c++ 文字列を入力して、一文字...
-
strncpyと_tcsncpy_sのヌルの扱...
おすすめ情報