A. java為什麼不支持"無符號型基本數據

我寫的 Java 程序如下:(程序功能:列出 200000 內的所有質數)
//計算質數
public class PrimeNumber {
public static void main(String args[]) {
long startTime = System.currentTimeMillis();

int count = 2;
System.out.print("2,3,");
boolean isPN = true;
int max = 1000*200;
for(int i=4;i<max+1;i++) {
isPN = true;
int n = (int)(i/2)+1;
for(int j=2;j<n;j++) {
if(i%j == 0) {
isPN = false;
break;
}
}
if(isPN) {
System.out.print(i+",");
count++;
}
}
long endTime = System.currentTimeMillis();
System.out.println ("");
System.out.println ("共用時間:"+(endTime-startTime)+"毫秒");
System.out.println ("共找到:"+count+"個質數");
}
}
我朋友寫的C#程序如下:
using System;
class test
{
static void Main() {
DateTime t1 = DateTime.Now;
cal(200000);
DateTime t2 = DateTime.Now;
TimeSpan t = t2-t1;
Console.WriteLine("時間為:{0} 毫秒\n",t.TotalMilliseconds.ToString());
Console.ReadLine();
}
static void cal(uint x)
{
Console.Write("2,");
uint sum=1;
for(uint a=3;a<x+1;a++)
{
bool flag=true;
uint n = (uint)(a/2)+1;
for(uint b=2;b<n;b++)
{
if(a%b!=0) continue;
flag=false;
break;
}
if(flag)
{
Console.Write(a+",");
sum++;
}
}
Console.WriteLine("\n {0} 以內共有 {1} 個質數\n",x,sum);
}
}
在我自己的機器上測試(機器配置:P42.4B+512M+WIN2003)
Java 為 JDK1.4.2_05
C# 為 WIN2003 自帶的 .net 1.1
比較結果真令人沮喪:
Java 程序使用了: 13M 內存 + 22 秒的時間
C# 程序使用了: 8M 內存 + 12 秒的時間
「不會吧,SUN 怎麼也是做了快10年的虛擬機了,怎麼會比 MS 的 .net 虛擬機慢這么多呢?」
我不相信。於是我把自己的 Java 程序改成了 C#程序,代碼如下:
//計算質數
using System;
class PrimeNumber {
static void Main() {
DateTime t1 = DateTime.Now;
int count = 2;
Console.Write("2,3,");
bool isPN = true;
int max = 1000*200;
for(int i=4;i<max+1;i++) {
isPN = true;
int n = (int)(i/2)+1;
for(int j=2;j<n;j++) {
if(i%j == 0) {
isPN = false;
break;
}
}
if(isPN) {
Console.Write(i+",");
count++;
}
}
DateTime t2 = DateTime.Now;
TimeSpan t = t2-t1;
Console.WriteLine ("");
Console.WriteLine ("共用時間:"+t.TotalMilliseconds.ToString()+"毫秒");
Console.WriteLine ("共找到:"+count+"個質數");
Console.ReadLine();
}
}
這次這個程序的執行結果為: 8M 內存 + 22 秒的時間
除了內存使用多一點(這可以理解,這里使用的內存只是 JVM 使用的內存,不代表程序實際使用的內存),
在時間上 C#程序 和 Java程序 沒有什麼差別了。
難道是我朋友寫的程序的演算法好,可我怎麼看,也看不出它好在哪裡啊!
於是我改了一下我朋友寫的程序:(只是把 uint 改成了 int 型數據)具體代碼如下:
using System;
class test
{
static void Main() {
DateTime t1 = DateTime.Now;
cal(200000);
DateTime t2 = DateTime.Now;
TimeSpan t = t2-t1;
Console.WriteLine("時間為:{0} 毫秒\n",t.TotalMilliseconds.ToString());
Console.ReadLine();
}
static void cal(int x)
{
Console.Write("2,");
int sum=1;
for(int a=3;a<x+1;a++)
{
bool flag=true;
int n = (int)(a/2)+1;
for(int b=2;b<n;b++)
{
if(a%b!=0) continue;
flag=false;
break;
}
if(flag)
{
Console.Write(a+",");
sum++;
}
}
Console.WriteLine("\n {0} 以內共有 {1} 個質數\n",x,sum);
}
}
執行結果還是: 8M 內存 + 22 秒的時間
這進一步說明,Java 和 .net 虛擬機在執行效率上基本沒有差別。
最開始的兩個程序產生差別的唯一原因就是:
C#內置支持無符號數
Java 則只有有符號數
在只需要正數的環境下,Java 的效率下去了!
Java 為什麼不內置支持 「無符號基本數據類型」呢??
這讓我們在寫網路程序時, byte 是有符號數,讓我們不得不小心的處理,以免出現錯誤。
強烈建議 Java 內置支持 無符號基本數據類型!

B. java怎麼表示64位無符號整數

java本身是沒有無符號數的,若實在需要,可以自己寫一個封裝類來實現。

C. java無符號數值怎麼辦呢

java 的 byte 類型正合適。

D. java中沒有無符號整數,需要怎樣解決這個問題

在java中沒有無符號整數,如果想要達到無符號整數的效果需要自己寫程序來解決,通常就是移位運算,可以到我的空間里查看,有源碼。

E. 無符號char型,在java 中怎麼定義

Java的設計者感到無符號整數是不必要的。具體地說,他們感到無符號(unsigned)概念主要被用來指定高位(high-orderbit)狀態,它定義了當int表示一個數字時的符號。你將在第4章中看到,Java對高位含義的管理是不同的,它通過增加一個專門的「無符號右移」運算符來管理高位。這樣,就不需要無符號整數了。

所以JAVA是沒有無符號類型的

F. Java是出於什麼考慮不設計無符號整型的

即有范圍限制的整數;Int(整型)32位帶符號整數-2^31到2^31-1之間的任意整數;其他類型:Byte8位帶符號整數-128到127之間的任意整數Short16位無符號整數-32768~32767之間的任意整數Long64位帶符號整數-2^63到2^63-1之間的任意整數

G. java如何定義一個無符號類型的變數

ava簡單數據類型

簡單類型 大小 范圍/精度

float 4 位元組 32位IEEE 754單精度

double 8 位元組 64位IEEE 754雙精度

byte 1位元組 -128到127

short 2 位元組 -32,768到32,767

int 4 位元組 -2,147,483,648到2,147,483,647

long 8 位元組 -9,223,372,036,854,775,808到9,223,372,036, 854,775,807

char 2 位元組 整個Unicode字元集

boolean 1 位 True或者false

H. java 無符號長整形,無符號整形怎麼定義

java數據的基本類型不支持無符號變數!
回答完畢!

I. 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