博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVACard 基本数据类型的运算及溢出问题
阅读量:6707 次
发布时间:2019-06-25

本文共 1145 字,大约阅读时间需要 3 分钟。

一.数据的运算  

  在目前javacard开发中,能用到的基本数据类型是byte和short,而对与java来说这两种都是有符号的数,因此在基本运算时会有大量的强制类型转换,因此经常导致数据溢出的情况,为了以后少掉进坑里,这里做简要的记录。

  当整数的数据大小超出了可以表示的范围的时候,而程序又没有做数值检查,就会发生数据溢出的问题。例如对于byte的整数来说,其表示的范围大小是-128~127;short类型的基本数据的取值范围为-32768~32767。在javacard中大部分涉及到byte数据类型的处理,而byte数据类型大小非常有限,正整数的范围只有127,超过则变成负数,计算会得到意料之外的结果。因此在javacard的applet程序中要特别注意。

  例如当计算(short)121+(byte)0xAC时得到的结果是37,因为byte0xAC实际代表的数据大小是-84,那么如果要进行正整数运算怎么办呢,可以在(byte)0xAC&0xFF,这样(byte)0xAC就转换成了正整数172,而(short)121+((byte)0xAC&0xFF)可以得到预期的结果293。但是这个时候也应该注意,不可以写成

(short)121+(byte)0xAC&0xFF,此时的计算结果还是37,那是因为+的运算优先级大于&,所以先求加法运算,然后再&运算,附上java优先级的列表

运算符 结合性
[ ] . ( ) (方法调用)
  
从左向右
  
! ~ ++ -- +(一元运算) -(一元运算) 
  
从右向左
* / %
  
从左向右
+ -
  
从左向右
<< >> >>>
  
从左向右
< <= > >= instanceof
  
从左向右
== !=
  
从左向右
&
  
从左向右
^
  
从左向右
|
  
从左向右
&&
  
从左向右
||
  
从左向右
?:
  
从右向左
  
= += -= *= /= %= &= |= ^= <<= >>= >>=
从右向左

  对于javacard的APDU通信协议,需要大量的byte数据处理,任何需要正整数的场合,如字节长度等都需要&0xFF。

二.类型的转换

  JavaCard主要支持两种基本数据类型,short和byte,因此当short数据类型转换成byte时,一定要注意数据溢出问题,例如对于short(227),转换成byte类型的结果是21。这是因为short(227)转换为16进制数据类型为0x115,转换为byte后为0x15,十进制就是21.

转载于:https://www.cnblogs.com/vimzhu/p/6129267.html

你可能感兴趣的文章
如何学习软件需求分析
查看>>
暑假进度报告6
查看>>
带宽、数据的网络传输
查看>>
android短信发送器源代码
查看>>
团队作业一(分析)
查看>>
关于排序的一点感想
查看>>
Shell - Tips
查看>>
CPU使用率
查看>>
[JOI2017/2018]美術展
查看>>
从整数到有理数
查看>>
阿諾爾德的「常微分方程」中對「單參變換羣」的定義好像有問題
查看>>
读高性能JavaScript编程 第四章 Duff's Device
查看>>
<05>判断字符串是否为空
查看>>
BZOJ3417[Poi2013]Tales of seafaring——BFS
查看>>
Handsontable 学习笔记-Methods
查看>>
iPhone图片拉伸:resizableImageWithCapInsets
查看>>
JS、JQuery和ExtJs动态创建DOM对象
查看>>
转贴:压缩传感(Compressed sensing)
查看>>
excel如何提取单元格中的数字
查看>>
云时代架构阅读笔记之六
查看>>