文档章节

保证程序运行整型数据有效

tcxu
 tcxu
发布于 2017/08/29 16:11
字数 1758
阅读 18
收藏 0

Java 四种基本整型数据类型变量的操作限制 

编译运行以下程序,可以得到Java四种基本整型数据类型:byte, short, int, 和 long 的取值范围。

public class Limits{
	public static void main(String args[]){
/* 打印六种数字基本类型变量的最大值和最小值 */   
System.out.println("长型最大值 LONG_Max: " + Long.MAX_VALUE);
System.out.println("长型最小值 LONG_Min: " + Long.MIN_VALUE);
System.out.println("整型最大值 Int_Max: " + Integer.MAX_VALUE);
System.out.println("整型最小值 Int_Min: " + Integer.MIN_VALUE);
System.out.println("短型最大值 SHORT_Max: " + Short.MAX_VALUE);
System.out.println("短型最小值 SHORT_Min: " + Short.MIN_VALUE);
System.out.println("字节型最大值 BYTE_Max: " + Byte.MAX_VALUE);
System.out.println("字节型最小值 BYTE_Min: " + Byte.MIN_VALUE);
	}
}

输出:

长型最大值 LONG_Max: 9223372036854775807

长型最小值 LONG_Min: -9223372036854775808

整型最大值 Int_Max: 2147483647

整型最小值 Int_Min: -2147483648

短型最大值 SHORT_Max: 32767

短型最小值 SHORT_Min: -32768

字节型最大值 BYTE_Max: 127

字节型最小值 BYTE_Min: -128

知识要点:

  • Java四种基本整型数据类型变量 (长型 long、整型 int、短型 short、和字节型 byte),  需要不同的存储空间(分别为 8、4、2、1 字节),表示不同的数据取值范围。
  • Java 字节型 (byte)变量,需1 个字节的存储空间,所能表示的最大正整数为:2^7 - 1 = 127,最小负整数:-128。
  • Java 整型 (int)变量,需4 个字节的存储空间,所能表示的最大正整数为:2^31 - 1 = 2147483647,最小负整数:-2147483648。
  • Java 为每个基本数据类型(primitive data type)设计了一个对应的类, 来处理有关事宜。四个基本整型数据类型都对应有各自的包装类(或称外覆类或数据类型类, Wrapper Class)。
  • 这四种基本整型数据类型的包装类分别是:Long、Integer、Short、和 Byte。 它们都用静态字段:MAX_VALUE 和MIN_VALUE 分别表明所能存储的最大正整数和最小负整数。

 

有效数据 Valid Data

N的阶乘是指 从1乘以2乘以3乘以4 一直乘到所要求的数 n!=1×2×3×……×n  或 n!=n×(n-1)!

程序分别通过 byte, short, int, long 类型变量计算阶乘,并使用 BigDecimal 和 BigInteger 进行对比计算,结果展示如图:

分析:

  • 与其余较可靠渠道的计算结果相比, byte, short, int, long变量,先后分别第一次出现了6、8、13、21阶乘的“垃圾”数据。这四个单元格背景均标为红色。
  • 在 字节型、短型、整形、和 长型 这四列里,每列 红单元格以下的单元格数据,都是“垃圾”。
  • 选择 byte 为变量类型,只能正确计算最高 5 的阶乘; 选择 short, 最高7的阶乘;选择 int, 最高 12 的阶乘; 选择long, 最高20的阶乘。
    选择的变量类型 最高能计算的阶乘 n!
    byte 5
    short 7
    int 12
    long 20
  • 通过 BigDecimal 和/或 BigInteger,才能得到更高(n>20)阶乘的数据。

供上述比较分析用的java程序代码,如下:

import java.math.BigDecimal;
import java.math.BigInteger;
import java.awt.Graphics;
import java.awt.Component;
import java.awt.Color;
import java.lang.*; 
import javax.swing.*;
import javax.swing.table.TableColumn;
import javax.swing.table.DefaultTableCellRenderer;

public class Factorial_0 extends JFrame {

  byte byteFac=1;//用字节型存储阶乘的变量,0阶乘为1
  short shortFac=1;//用短型存储阶乘的变量,0阶乘为1
  int iFactoria1=1;//用整型存储阶乘的变量,0阶乘为1
  long lFactoria1=1;//用长型存储阶乘的变量,0阶乘为1
  /*创建代表整数1的BigDecimal对象*/
  BigDecimal bFactorial = new BigDecimal("1");
  /*创建代表整数1的BigInteger对象*/
  BigInteger big= new BigInteger("1");
  /*创建储存数据的二维字符串类型的数组 data*/
  String data[][]=new String[27][7]; 
  /*创建表的列(字段)名称*/
  String fields[] = {"阶乘", "用字节型", "用短型short", "用整型 int ", 
  "通过长型 long 计算", "使用 BigDecimal 计算","使用 BigInteger 计算"};
	
	
public static void main(String args[]) { //主方法代码块开始
		new Factorial_0();
	}//主方法代码块结束

public void makeFace(JTable table) {  // 渲染单元格背景色 方法 makeFace 开始
        try {  
            DefaultTableCellRenderer tcr = new DefaultTableCellRenderer() {  
  
                public Component getTableCellRendererComponent(JTable table,  
                        Object value, boolean isSelected, boolean hasFocus,  
                        int row, int column) {  
                    if (row % 2 == 0) {  
                        setBackground(Color.white);//设置奇数行底色  
                    } else if (row % 2 == 1) {  
                        setBackground(new Color(255, 204, 255));//设置偶数行底色  
                    }
                    if ((row == 5 && column == 1) || (row == 7 && column == 2)
                     || (row == 12 && column == 3) || (row == 20 && column == 4)) 
                    setBackground(Color.red); 
          
                    return super.getTableCellRendererComponent(table, value,  
                            isSelected, hasFocus, row, column);  
                }  
            };  
            for (int i = 0; i < table.getColumnCount(); i++) {  
                table.getColumn(table.getColumnName(i)).setCellRenderer(tcr);  
            }  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
    } // 方法 makeFace 结束
    

public Factorial_0(){ //类 Factorial 的构造方法代码块 开始
	super("查看用各种方法储存正整数的能力 :计算阶乘");
	factorial();
	JTable table = new JTable(data,fields);
	table.getColumnModel().getColumn(0).setMaxWidth(70);
	table.getColumnModel().getColumn(1).setMaxWidth(70);
	table.getColumnModel().getColumn(2).setMaxWidth(70);
	table.getColumnModel().getColumn(3).setMaxWidth(80);
	table.getColumnModel().getColumn(4).setMaxWidth(200);
	table.getColumnModel().getColumn(5).setMaxWidth(300);
	table.getColumnModel().getColumn(6).setMaxWidth(300);
	makeFace(table); // 调用 makeFace 方法,渲染单元格背景色
	JScrollPane pane = new JScrollPane( table );//将table放入一个有滚动条的视口
    getContentPane().add(pane);//将视口放置于带有标题和边框的顶层窗口JFrame
	setVisible(true);
	setSize(850,500);
	} // 构造方法代码块 结束

public void factorial(){ // 方法 factorial() 计算阶乘开始
for (int i=1; i<27;i++){ //用for循环语句输出1到16的阶乘
    byteFac 	*=i;
    shortFac 	*=i;
    iFactoria1 	*=i;  //将i的阶乘存入整型变量
    lFactoria1 	*=i;  //将i的阶乘存入长型变量
    bFactorial = bFactorial.multiply(new BigDecimal(Integer.toString(i)));
    big = big.multiply(new BigInteger(Integer.toString(i)));
	/*将数据以字符串形式存入二维数组data*/
	data[i-1][0] = i + "的阶乘:";
	data[i-1][1] = Byte.toString(byteFac); //将byte型数据转换成字符串型,存入data数组
	data[i-1][2] = Short.toString(shortFac);//将short型数据转换成字符串型,存入data数组
	data[i-1][3] = Integer.toString(iFactoria1);//将int型数据转换成字符串型,存入data数组
	data[i-1][4] = Long.toString(lFactoria1);//将long型数据转换成字符串型,存入data数组
	data[i-1][5] = bFactorial.toString();//将BigDecimal数据对象转换成字符串型,存入data数组
	data[i-1][6] = big.toString();//将BigInteger数据实体转换成字符串型,存入data数组
	}
	/*将各种类型能表示的最大正整数值,以字符串形式存入二维数组 data 的最后一行 */
	data[26][0]="MAX_VALUE";
	data[26][1]= Byte.toString(Byte.MAX_VALUE);
	data[26][2]= Short.toString(Short.MAX_VALUE);
	data[26][3]= Integer.toString(Integer.MAX_VALUE);
	data[26][4]= Long.toString(Long.MAX_VALUE);
	data[26][5]="无 MAX_VALUE 字段";
	data[26][6]="无 MAX_VALUE 字段";	
  }  // 方法 factorial() 代码块结束
}  // 类 Factorial_0 定义结束

 

© 著作权归作者所有

共有 人打赏支持
tcxu
粉丝 43
博文 4
码字总数 4229
作品 0
海淀
其他
C语言数据类型中的基本类型

  变量的数据类型   在应用程序中,由于数据存储时所需要的容量各不相同,因此,为了区分不同的数据,需要将数据划分为不同的数据类型。C语言中的数据类型有很多种,具体分类如下图所示。...

C语言
2017/04/12
0
0
【Qt笔记】二进制文件读写

在上一章中,我们介绍了有关和两个类的使用。我们提到,提供了、等基本的操作。同时,Qt 还提供了更高一级的操作:用于二进制的流和用于文本流的。本节,我们将讲解有关的使用以及一些技巧。...

大道无名
2016/07/31
31
0
Qt 二进制文件读写

在上一章中,我们介绍了有关和两个类的使用。我们提到,提供了、等基本的操作。同时,Qt 还提供了更高一级的操作:用于二进制的流和用于文本流的。本节,我们将讲解有关的使用以及一些技巧。...

乔三爷
2016/09/27
15
0
大小字节序的深入理解和鉴定系统字节序方法

最近在项目中的soket通信时,遇到了大小字节序问题和网络传输时的字节序问题,现在给大家整理一下,希望大家对字节序有个比较深入的了解,其实理解了就很简单的。 开始遇到的问题: 1、本地的...

沙米笔记
2016/03/26
649
3
大端模式&小端模式、主机序&网络序、入栈地址高低问题

一、大端模式&小端模式 所谓的“大端模式”,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作...

AlphaJay
2010/06/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
2
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
7
3
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
4
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
2
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部