package com.wangzhu.datatype;

/**
* Java基本数据类型练习
*
* @ClassName: DataTypes
* @Description: TODO
* @author wangzhu
* @date 2013-8-10 上午11:41:31
*
*/
public class DataTypes { /**
* @param args
*/
public static void main(String[] args) {
// byte类型:数据范围:(-2^7 ~ 2^7-1),其中(2^7 = 128)
byte num001 = 127;
// byte num0011 = 128;//编译失败,超出了该类型的数据范围,若要将这个数据赋给该变量,则需要强制转化
byte num0012 = (byte) 128;
byte num0013 = (byte) 129;
byte num0014 = (byte) 1000;
byte num002 = -128;
// byte num0021 = -129;//编译失败,超出了该类型的数据范围,若要将这个数据赋给该变量,则需要强制转化 byte num0022 = (byte) -129;
byte num0023 = (byte) -130;
byte num0024 = (byte) -490;
System.out.println("num001 = " + num001 + " num0012 = " + num0012
+ " num0013 = " + num0013 + " num0014 = " + num0014
+ " num002 = " + num002 + " num0022 = " + num0022
+ " num0023 = " + num0023 + " num0024 = " + num0024);
// num001 = 127 num0012 = -128 num0013 = -127 num0014 = -22 num002 =
// -128 num0022 = 127 num0023 = 126 num0024 = 22
// 从结果可以看出,当赋给的变量值超过了该类型的数据范围时,则其会从该类型的数据范围的最大值或最小值,加上或减去超出的部分,最后并加一或减一,结果就是该变量的值
// 例如:本例中,num0013,其比最大值(127)大2,那么最小值应该加上2,并减去1,故num0013 = -127
// 例如:本例中,num0023,其比最小值(-128)小2,那么最大值应该减去2,并加上1,故num0013 = 126
// 但是,对于num0014,num0024,按照上述方法,计算的结果和输出不同,其实不是的,其中还有点细节,具体如下:
// 对于超出最大值的,则其结果必然是非正数,对于超出最小值的,则其结果必然是非负数。 for(int i = 0 ;i < 1000;i ++){
byte numi = (byte)i;
int ii = test(i,127,256);
if(!String.valueOf(ii).equals(String.valueOf(numi)))
{
System.out.println("i = " + i + " == " + (i - 127) + " numi = " + numi + " ii= " + ii);
}
}
for(int i = -1000 ;i < 0;i ++){
byte numi = (byte)i;
int ii = test(i,-128,256);
if(!String.valueOf(ii).equals(String.valueOf(numi)))
{
System.out.println("i = " + i + " == " + (i + 127) + " numi = " + numi + " ii= " + ii);
}
}
//总结:对于正数,其实在下列数列中数到第i个数,就是i强制转化的结果,该数列为:0 ~ 127,-128 ~ 0 ~ 127,-128 ~ 0 ~ 127...
//总结:对于负数,其实在下列数列中数到第i个数,就是i强制转化的结果,该数列为:0 ~ -128,127 ~ 0 ~ -128,127 ~ 0 ~ -128... } /**
* 测试数据类型为byte时,数据超出范围后的值的规律
* @param num 强制转换的值
* @param normal 正向最大值或负向最小值
* @param maxNum 数据范围的大小
* @return 测试规律的结果
*/
public static int test(int num, int normal,int maxNum) {
num = num % maxNum;
int value = -1;
if (normal > 0) {
if(num <= normal){
value = num;
}else{
value = num - normal;
normal ++;
value = value - normal - 1 ;
}
} else {
if(num >= normal){
value = num;
}else{
value = num - normal;
normal ++;
value = value - normal + 1;
}
}
return value;
} }

以上是本人闲暇时,根据自己所猜测的想法,实现了一下。其中想法可能不太成熟,若有错误,请指出,谢谢!仅供参考!

补充:对于int转换为byte,就是截取32位int的后8位,若此时的高位是1,则表明该byte是负数,否则是正数!!!强制类型转换会丢失高位,只保留转换类型的位数。

简单讨论数据类型(byte)强制转化后的数值变化规律的更多相关文章

  1. Java中基本数据类型byte的溢出问题

    Java中基本数据类型byte的溢出问题 问题源于:https://www.cnblogs.com/HuoHua2020/p/12326631.html 定义两个byte类型的数据,将其之和赋值给一个 ...

  2. C语言指针强制转化的应用

    指针类型强制转化在kernel设计中非常常见,这里记录两个非常有意思的用法: 1.对地址进行运算.任何虚拟地址都表示成void *va  = (void *) 100, *(va + 1) ==101 ...

  3. java中的int与byte的转化

    java中的int与byte的转化 1.基础准备 1.1.原码 就是二进制码,最高位为符号位,0表示正数,1表示负数,剩余部分表示真值 1.2.反码 在原码的基础上,正数反码就是他本身,负数除符号位之 ...

  4. python的变量和简单的数据类型

    决定学习python这门语言了,本人资质愚钝,只会把学到的东西记录下来,供自己查漏补缺,也可以分享给和我一样正在学习python语言的人,若在记录中存在什么错误,希望多多批评指正,谢谢. Python ...

  5. C/C++之类型强制转化

    强制转化四种类型可能很多人都常常忽略就象我一样,但是有时还是比较有用的.不了解的建议看看,一些机制我也不是十分了解,只是将一些用法写出来让大家看看.                           ...

  6. PHP:第一章——php中数据类型和强制类型转换

    <?php //PHP中的数据类型: //标量类型:布尔型(boolean).整型(integer).浮点型(float).字符串型(string) //复合类型:数组(array).对象(ob ...

  7. JavaScript学习10 JS数据类型、强制类型转换和对象属性

    JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...

  8. Python入门学习:1.变量和简单的数据类型

    python入门学习:1.变量和简单的数据类型 关键点:变量.字符串.数字 1.1 变量的命名和使用1.2 字符串1.3 数字1.4 注释 1.1 变量的命名和使用   变量,顾名思义是一个可变的量, ...

  9. java由字符型强制转化为整型例题

    此Java程序依次输出参数,参数类型为字符型,要求更改程序,使得字符型强制转化为整形,并将这些整数相加,最后输出总和. 原程序: package demo; public class CommandP ...

随机推荐

  1. Sql的实际应用

    sql实际应用-递归查询   1.既然要谈到sql,数据库表是必须的   2.数据结构     3.获取某个节点的所有子节点     传统的写法(sql2000) 很麻烦,暂且就不写了     来看看 ...

  2. 在线HTML编辑器 kindeditor-4.1.10 上传图片文件 应用指南

    1.在ASPX页面中对应的head.body添加相应的红色部分 2.引用kindeditor-4.1.10中的litjosn.dll 3.在写入数据库时要替换相应的路径和IP 4.kindeditor ...

  3. SQL Server 可疑的解决办法

    SQL SERVER 数据库状态为“可疑”的解决方法 --MyDB为修复的数据名 USE MASTER GO SP_CONFIGURE RECONFIGURE WITH OVERRIDE GO ALT ...

  4. oninput和onpropertychange

    时常会有监听输入框输入的场景,比如新浪微博的发微博输入框: 还有边输入边提示: 以及form表单边输入边验证,当内容为空提示或者改变输入框的样式达到提示效果. 在IE中是onpropertychang ...

  5. 用python下载辞典

    用python下载词源词典Etymoline Online Etymology Dictionary是最好的 English 词源词典,现在来说没有之一.但是,一直在PC上查单词有时不是很方便,遂就想 ...

  6. linux 判断指定用户对指定目录具有的权限

    脚本名:power.sh 脚本内容: ------------------------------------------- 注意:必须以root 身份执行该脚本. 脚本power.sh 需要两个参数 ...

  7. 九度OJ 1362 左旋转字符串(Move!Move!!Move!!!)【算法】

    题目地址:http://ac.jobdu.com/problem.php?pid=1362 题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运 ...

  8. C语言使用中的细节问题总结

    1.在使用bool关键字时,出现"error:'bool' undeclared(first use in this function)"的错误,原因为C语言本身是没有bool关键 ...

  9. 纯javascript 回到 顶部 实例

    很多网站都会采用瀑布式的加载模式,像qq空间加载好友动态,为了用户体验更好,很多网站会加上回到顶部的连接,但大多数网站都是一下子就回到了顶部,当然,这样有这样的好处,但是我是个比较喜欢很炫的东西的人, ...

  10. Asp.net Gridview导出Excel

    前台页面放一个GridView什么的就不说了,要注意的是在 <%@ Page Language="C#" AutoEventWireup="true" C ...