`
王树雄
  • 浏览: 239290 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

short类型问题

 
阅读更多
short类型问题
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译)
这里涉及到变量类型统一的问题
有这样的规则,1.高位转低位需要强制转换
             2.低位转高位自动转.
short s1 = 1; s1 = s1 + 1;有什么错?
答: i 是int 型   s1 short型 通过 + 运算后
s1 自动转为int 型   所以错!
short s1 = 1; s1 += 1;有什么错?
答: 如果你认为表达式(x += i)只是表达式(x = x + i)的简写方式,这并不准确。这两个表达式都被称为赋值表达式。第二个表达式使用的是简单赋值操作符(=),而第一个表达式使用的是复合赋值操作符。Java语言规范中讲到,复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2))),其中T是E1的类型,除非E1只被计算一次。
   换句话说,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原生类型转换。
   因此,复合赋值表达式可能是危险的。为了避免这种令人不快的突袭,请不要将复合赋值操作符作用于byte、short或char类型的变量。

因为S1是short型的,占2个字节,而1是int型的,占4个字节。在两个类型的值相加的时候,会发生自动类型的提升。也就是说s1+1后,其结果是int型的,而不是short型的,所以可以想想看,把4个字节的东西放在两个字节的空间里,肯定编译不通过。    后面的那个不会发生类型的提升,JAVA规范上说    e1+=e2    实际上是    e1=(T1)(e1+e2),其中T1是e1的数据类型。   s1+=1等效于   s1=(short)(s1+1),所以是正确的。
分享到:
评论

相关推荐

    Keil MDK-ARM各种数据类型占用的字节数 char short int float double

    Keil MDK-ARM各种数据类型占用的字节数 char short int float double占用字节数,uCOS-II

    c++

    NULL 博文链接:https://xyq1558.iteye.com/blog/817888

    java 举例分析 equals hashcode 基本类型与基本对象的比较 shot与Short int与Integer long与Long

    举例分析 equals 和 hashcode 方法,hashcode应该怎么样生成 8个基本类型与基本对象的比较:byte与Byte shot与Short int与Integer long与Long float与Float double与Double char与Character

    Java中各个数据类型之间的转换

    也就是说byte类型的变量可以自动转换为short类型,示例代码: byte b = 10; short sh = b; 这里在赋值时,JVM首先将b的值转换为short类型,然后再赋值给sh。 在类型转换时可以跳跃。示例代码: byte b1 = 100; ...

    C++数据类型及取值范围

    C++数据类型及取值范围 1.基本数据类型: ①字符类型:char(字符型) 例:‘A’,’b’ ②整数类型:int(整型) 例:4563, 234, 885634 ③浮点类型:float(单精度型)、double(双精度型) 例:3.1456 , 0.9e12 ④空值...

    TEST-5-ORIGINAL.rar_short

    ARM2200的通用寄存器总数为31个,对于小规模应用程序是足够了,但在MPEG4解码过程中往往会用到较多的寄存器,所以仍须节俭。 方法如下: ...而对于全局变量,使用short类型,则可减小Flash的使用量。

    腾讯笔试真题合集

    腾讯笔试真题合集,腾讯09年到16年校园招聘笔试试题。

    组态王的数据类型

    组态王的数据类型,详细的介绍,内存离散变量、I/O离散变量、2.内存实型变量、I/O实型变量

    java数据类型的转换简单数据类型之间的转换 (2). 字符串与其它数据类型的转换 (3). 其它实用数据类型转换

    一些初学JAVA的朋友可能会遇到JAVA的数据类型之间转换的苦恼,例如,整数和float,double型之间的转换,整数和String类型之间的转换,以及处理、显示时间方面的问...byte、short、int、long;浮点型float、double。其

    short与int转换的小例子

    int main(){ short a=-1; unsigned int b=a; int c=a;  printf(“%x\n”, b); printf(“%d\n”, c);  a=1; b=a; c=a; printf(“%x\n”, b); printf(“%d\n”, c);  return 0;}输出为:ffffffff-111说明,...

    JAVA8大数据类型.pdf

    JAVA8⼤数据类型 ⼤数据类型 8⼤基本数据类型 8⼤基本数据类型在内存中占⽤的⽐特... 具体规则为:double float long int short(char) byte 语法格式为:(转换到的类型)需要转换的值 注意:⼩转⼤会有丢失精度的问题!

    java基本数据类型.docx

    整数类型:byte、short、int、long 浮点类型:float、double 字符类型:char 布尔类型:boolean 这些基本数据类型在Java中用于存储不同类型的数据值,它们分别占用不同的内存空间,并具有不同的取值范围。在Java中,...

    int类型和byte数组之间的转换

    写一个方法,将int类型转换为字节数组,输入任意int类型整型,输出字节数组;写第二个方法,输入字节数组,输出对应int类型数据。

    C#自动类型转换与强制类型转换的讲解

    自动类型转换 ...也就是说byte类型的变量可以自动转换为short类型,示例代码: byte b = 10; short sh = b; 在类型转换时可以跳跃。示例代码: byte b1 = 100; int n = b1; 强制类型转换 显式

    1016 整型数据类型存储空间大小.cpp

    分别定义int,short类型的变量各一个,并依次输出它们的存储空间大小(单位:字节)。 【输入】 (无) 【输出】 一行,两个整数,分别是两个变量的存储空间大小,用一个空格隔开。 【输入样例】 (无) 【输出样例...

    BiLSTM_RNN-LSTM_RNN_short_lstm神经网络_LSTM

    41Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息。LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。在很多问题,LSTM 都...

    C数据类型大小

    short 在内存中占两个字节 范围为 2^15 (2^15 1 int 在内存中占四个字节 范围为 2^31 (2^31 1) long在内存中占四个字节 范围为 2^31 2^31 1 无符号型:最高位不表示符号位 unsigned short 在内存中占两个字节...

    iShort-crx插件

    他们可以选择背景颜色,字体的类型和大小等。因此,总而言之–这个宏伟而简单的扩展名可以节省您宝贵的时间(每天最多可以节省1个小时的互联网阅读时间!),并且可以您可以根据自己的喜好自定义屏幕的外观。 据您所...

    Java程序设计基础:基本数据类型.pptx

    基本数据类型 目录 课程导入 掌握Java基本数据类型 掌握直接量的表示 计算机的基本作用就是做运算。运算的数据可以由用户输入、从文件获得。 我们可以把数据进行归类,整数、小数、一串字符、单个字符。 数据类型 ...

    各数据类型的有效数字和精度.docx

      对于 int 类型的变量来说,有四种表示长度的限定符(除int本身外,还有 short,long 和 long long),在加上符号位的限定signed和 unsigned,所以一共存在着2 * 4 = 8 种int 类型的变量。 然后这八种类型简记为...

Global site tag (gtag.js) - Google Analytics