javaunsigned
㈠ 如何在java中定義一個結構體
像C/C++里的,第三方的Javolution庫提供了類似的解決方案:
enumGender{MALE,FEMALE};
structDate{
unsignedshortyear;
unsignedbytemonth;
unsignedbyteday;
};
structStudent{
enumGendergender;
charname[64];
structDatebirth;
floatgrades[10];
Student*next;
};
publicenumGender{MALE,FEMALE};
{
publicfinalUnsigned16year=newUnsigned16();
publicfinalUnsigned8month=newUnsigned8();
publicfinalUnsigned8day=newUnsigned8();
}
{
publicfinalEnum32<Gender>gender=newEnum32<Gender>(Gender.values());
publicfinalUTF8Stringname=newUTF8String(64);
publicfinalDatebirth=inner(newDate());
publicfinalFloat32[]grades=array(newFloat32[10]);
publicfinalReference32<Student>next=newReference32<Student>();
}
㈡ Java不提供無符號整數類型謝謝
是的不提供;
--------------------------------------
Java 中的無符號類型是怎麼回事兒?
在 C 和 C++ 這樣的語言中,都提供了不同長度的整數類型:char, short, int, long (實際上,char 並不是真正的整數,但是你可以把它當成整數來用。在實際應用場景中,很多人在 C 語言中用 char 來存儲較小的整數)。在大部分的 32 位操作系統上,這些類型分別對應 1 位元組,2 位元組,4 位元組和 8 位元組。但是需要注意的是,這些整數類型所對應的位元組長度在不同的平台上是不一樣的。相對而言,由於 Java 是針對跨平台來設計的,所以無論運行在什麼平台上,Java 中的 byte 永遠是 1 位元組,short 是 2 位元組,int 是 4 位元組,long 是 8 位元組。
C 語言中的整數類型都提供了對應的「無符號」版本,但是 Java 中就沒有這個特性了。我覺得 Java 不支持無符號類型這個事兒實在是太不爽了,你想想,大量的硬體介面、網路協議以及文件格式都會用到無符號類型!(Java 中提供的 char 類型和 C 中的 char 有所不同,在 Java 中,chat 是用 2 個位元組來表示 Unicode 值,在 C 中,char 是用 1 個位元組來表示 ASCII 值。雖然可以在 Java 中把char 當做無符號短整型來使用,用來表示 0 到 2^16 的整數。但是這樣來用可能產生各種詭異的事情,比如當你要列印這個數值的時候實際上列印出來的是這個數值對應的字元而不是這個數值本身的字元串表示)。
那麼,如何應對 Java 中無符號類型的缺失?
好吧,對於我給出的這種方案,你可能會不喜歡……
答案就是:使用比要用的無符號類型更大的有符號類型。
例如:使用 short 來處理無符號的位元組,使用 long 來處理無符號整數等(甚至可以使用 char 來處理無符號短整型)。確實,這樣看起來很浪費,因為你使用了 2 倍的存儲空間,但是也沒有更好的辦法了。另外,需要提醒的是,對於 long 類型變數的訪問不是原子性操作,所以,如果在多線程場景中,你得自己去處理同步的問題。
地址:http://www.cnblogs.com/yuanyq/p/java_unsigned_types.html
原文地址:http://www.darksleep.com/player/JavaAndUnsignedTypes.html
原文作者:Sean R. Owens