`
王树雄
  • 浏览: 241927 次
  • 性别: 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开发环境中,了解不同数据类型的字节数对于编写高效且符合硬件要求的代码至关重要。本文将详细解析标题和描述中提到的各种数据类型在Keil MDK-ARM下的字节数占用情况。 首先,Keil MDK-ARM是一个针对...

    组态王的数据类型

    SHORT 数据类型:SHORT 数据类型是一个 16 位有符号整数,范围是 -32768 到 32767。它通常用于表示中等大小的整数值。 USHORT 数据类型:USHORT 数据类型是一个 16 位无符号整数,范围是 0 到 65535。它通常用于...

    short,int ,long,float取值范围

    通过将short类型的变量转换为二进制表示形式,我们可以直观地看到不同取值情况下short类型的内部存储状态。以下是对部分关键输出结果的解释: - **左溢出值**:`-32769`(十进制),表示超过了short类型的最小值,...

    c++

    标题 "C++" 指的是C++编程...通过深入学习和实践,你可以逐渐精通C++,并能够利用它的强大功能来解决各种复杂问题。记住,理解和运用C++的关键在于不断地编写、调试和优化代码,以及阅读优秀的开源项目以学习最佳实践。

    04-赋值中的自动类型转换-数值溢出问题.pptx

    赋值中的自动类型转换和数值溢出问题 在 C 语言程序设计中,赋值操作是一种常见的操作,但是在不同的数据类型之间赋值时,可能会出现自动类型转换和数值溢出的问题。在本节中,我们将讨论自动类型转换的规则、数值...

    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

    C#数据类型转换问题集锦

    C# 数据类型转换问题集锦 C# 数据类型转换是一个非常重要的概念,掌握好数据类型转换对于编程开发非常重要。本文将会对 C# 中的数据类型转换进行总结和分析,并提供了一些实用的代码示例。 在 C# 中,数据类型可以...

    get_unsigned_short.rar_short

    描述提到的“Union-Find算法”是图论中的一个经典算法,用于处理集合的连接和查找问题,特别是在稠密的非负整数集上。 首先,让我们来理解一下无符号短整型(unsigned short)在计算机科学中的含义。无符号短整型是...

    cls_multi_ushort.rar_short

    在C语言中,数据类型包括基本类型、派生类型等,其中`unsigned short`是派生类型的一种,用于存储无符号短整型数值。本文将深入探讨`unsigned short`类型及其在处理多个此类值时的注意事项。 `unsigned short`是...

    Java中几种常用数据类型之间转换的方法

    Java 中几种常用数据类型之间转换的方法 Java 是一种基于对象的编程语言,它支持多种数据类型之间的转换,这些转换在实际编程...但是,需要注意的是,在进行数据类型转换时,需要考虑到可能出现的精度丢失和溢出问题。

    C#数据类型.docC#数据类型.doc

    解决这个问题的方法是在赋值之前进行显式的类型转换: ```csharp s = (short)(s + 1); ``` **第二种情况**:`s += 1;` 使用复合赋值运算符`+=`时,C#编译器能够自动检测到赋值的目标类型是`short`,从而在内部...

    C# Byte数组转Int32 Short Float(浮点数)

    **字节顺序问题** 在进行字节数组和数值类型之间的转换时,需要注意字节顺序,即大端序(Big-Endian)和小端序(Little-Endian)。不同的系统和平台可能有不同的字节顺序。`BitConverter.IsLittleEndian`属性可以...

    char short int 范围测试程序

    在C语言中,`char`、`short`和`int`是三种基本的整数类型,它们各自有特定的数值范围。理解这些类型的范围对于编写高效且无错的C程序至关重要。下面我们将深入探讨这些数据类型及其在C语言中的应用。 `char`类型在...

    Classifying Relations via Long Short Term Memory Networks

    本文介绍了一种名为SDP-LSTM(Shortest Dependency Path - Long Short Term Memory networks)的新型神经网络模型,用于对句子中两个实体之间的关系进行分类。该模型利用两个实体之间的最短依赖路径(SDP),通过多...

    C++数据类型与C#数据类型之间的对应关系

    * SHORT:在C++中,SHORT类型是一个整数类型,而在C#中,它对应的是Int16类型。 * UINT:在C++中,UINT类型是一个无符号的整数类型,而在C#中,它对应的是UInt32类型。 * ULONG:在C++中,ULONG类型是一个无符号的...

    TEST-5-ORIGINAL.rar_short

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

    腾讯笔试真题合集

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

    acl-14-short-data.zip

    压缩包内包含了多个CSV和图形文件,每种文件类型对应不同的数据表示和用途: 1. “train.rawdepen.csv”:这是训练集的一部分,可能包含了依赖关系信息,有助于理解句子结构和词语之间的关系,从而辅助情感分析。 ...

    Oracle9i数据类型Java数据类型Schema类型对比.doc

    - Java 的基本数据类型如 byte, short, int, long, float, double, boolean 与 Oracle9i 中的某些数字类型相对应。 - String 类型用于存储文本,与 Oracle9i 中的 CHAR 和 VARCHAR2 类型匹配。 - Date 和 ...

Global site tag (gtag.js) - Google Analytics