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