"unsigned int" を short と back にします。これは可能ですか?その場合はどうすればよいですか?
うーん。符号付き数値がどのように実装されているか忘れました。質問は意味がありません。とにかくありがとう。私は自分自身に反対票を投じるつもりでしたが、代わりにそれを行うことができます。
あなたがあなたのために仕事をする基本的なタイプを望んでいるように聞こえますが、私はそれが存在するとは思いません。一方で、その仕事をするオブジェクトを作るのはそれほど難しいことではないと思います。必要に応じて調整して短くします。
パブリッククラスSpecialInt{
int i = 0;
public void set(int i){
if(i <0)throw new IllegalArgumentException( "cannot benegative");
this.i = i;
}
public void add(int j){
int t = i + j;
if(t <i)throw new IllegalArgumentException( "overflow!");
i = t;
}
public void sub(int j){
int t = ij;
if(t> i)throw new IllegalArgumentException( "overflow!");
i = t;
}
public void mult(int j){
int mult_max = Integer.MAX_VALUE / i;
if(j> mult_max)throw new IllegalArgumentException( "overflow!");
i * = j;
}
}
質問を完全に理解できるかどうかはわかりませんが、intがshortに収まることが確実な場合(数値は0から2 ^ 16の間)、いつでもintをshortにキャストできます。
int i = 65536;
short s = (short) i;
そして、符号なしの値を取り戻すには、次のようにします。int i2 = s&0xFFFF; System.out.println(i2);
はs & 0xFFFFsをintにアップキャストし、ビットマスクは負の数をその符号なしの値(一種)に「変換」します。65536ではなく-1の短い変数のFFFFであることを忘れないでください。
符号なしの型が必要な場合は、Javolutionライブラリを使用できます。
あなたの整数が何かの倍数であるなどの特定の特性を持っていない場合、私はあなたができるとは思わない.
問題は、通常は 32 ビット アーキテクチャである int に含まれる情報を short に含めることができないことです。
ご覧のとおり、Short.MAX_VALUE最大値は 2^15 - 1 です。これは、short が 16 ビットを占有するためです..実際には精度が失われ、2²² のような整数を表現することはできません..