精华内容
下载资源
问答
  • 可以将基本数据类型的源字段内容赋给其它基本数据类型的目标字段(除了数据类型 D 无法赋给数据类型 T,反之亦然)。ABAP/4 也支持结构化数据和基本数据对象之间或结构不同的数据对象之间的赋值。 对于每一赋值语句...

    Conversion Rules for Elementary Data

     

    可以将基本数据类型的源字段内容赋给其它基本数据类型的目标字段(除了数据类型 D 无法赋给数据类型 T,反之亦然)。ABAP/4 也支持结构化数据和基本数据对象之间或结构不同的数据对象之间的赋值。

    对于每一赋值语句(用 MOVE 或赋值运算符),系统都检查源字段和目标字段的数据类型。如果定义了此类组合的类型转换,则将源字段内容转换为目标字段数据类型并将其值赋给目标字段。

     

     

    总是按处理无小数位的类型 P 的相同方式处理类型 I。所以,下面表格中提到类型 P 时,同样适用于类型 I 字段。

     

    注意:此表仅只适用于赋值时类型的转换(包括实参传递给形参?),如果是比较的逻辑运算,请参考比较转换规则,其他如Write、字段符号都不会按此规则表进行转换

     

    DATA: a1(8) TYPE n ,
          a2(
    8) TYPE
    n ,
          b(
    8) TYPE c VALUE '-1.1235'
    .
    "WRITE
    赋值时,只作内存原样拷贝,不会作任何转换

    WRITE b TO a1.
    a2 = b.
    "
    这里会使用赋值转换规则,只将数字转换过去
    "字段符号也是一样不会按照赋值转换规则表进行转换
    field-SYMBOLS <fs>  TYPE n.
    ASSIGN b to
    <fs> CASTING.
    WRITE:/ 'write:'
    , a1.
    WRITE:/ '= :'
    , a2.
    WRITE:/ '<fs> :'
    , <fs>.

    write: -1.1235

    = : 00011235

    <fs> : -1.1235

     

    附录C 数据转换规则

     

               

     

    源类型

    目标类型

    转换规则

     

     

    C

     

    C

    左对齐将源中的字符传输到目标字段中,如长度不同,则用空格从右边开始进行填充(短于目标时),则在右边将其内容截断(长于目标时)。注:源中的尾部空格不会被传输到目标字段中

     

     

     

    C

     

    D

    源字段8个字符传输到目标字段中。为了日期有效,头8个字符应包含格式为YYYYMMDD8个数字字符日期,但实质每位可以是任意字符,转换时不会出错,并且会原样传输到目标字段中

     

     

     

    C

     

    F

    源字段内容必须是类型F字段的有效表示。

     

    先将源字段格式化为 <±尾数部分>E±<指数部分(至少占两位)> ,尾数部分为整数只有一位的小数格式,如果尾数部分的小数位大小于16位,第17位会四舍五入截断

     

    如果源全为空格,或者空格后面紧跟着非F类型所包含的合法字符时,则转换结果为0;如是有前导空格,但后面紧跟着的是合法的F格式字符,则还是会正确转换;如果含有的全是F格式合法字符,且中间含有空格时,空格后面所有合法的字符也不再被解析;如果不是以空格开头,且又含有非法字符,则运行时会抛出异常。

     

    DATA: c(30) VALUE '123.012345678901274567', f TYPE f."  1.2301234567890127E+02

     

    注:空格字符为F格式的合法字符,且空格后紧跟着的所有字符都会被忽略不处理,所以空格后面紧跟着的其他非法字符也是没有问题的,比如 ' 1 a'就可以合法转换,但 ' 1a' 运行时就会抛出异常

     

     

     

    C

     

    N

    将源字段中的所有数字传输到目标字段中,并且是右对齐的方式

    如果目标字段过长,则会使用0来填充左边;如果目标字段过短,则左边多余的会截断

     

     

     

    C

     

    IP

    所有能转换的字符组成的结果不能超出I的取值范围(-2147483648~+2147483647),否则会抛出异常。

     

    不能大于目标P所定义的长度,比如下面代码中,p最大只能为 999 ,如果再多一位,则运行时就会抛出异常

    DATA: c(3) VALUE '999', p(2) TYPE p .

     

    如果源全为空格,则转换结果为0;如是有前导空格,但后面紧跟着的是合法的I/P格式字符,则还是会正确转换;

    CF不同的是,' 1 2' 类似的串运行时会抛异常,也就是说,在源串中,空格只能为前导,而不能出现在中间,即使所有的字符都是I/P格式合法字符。

     

     

     

    C

     

    T

    源字段应包含格式为HHMMSS6个数字字符时间。其他规则与 CD是一样的

     

     

     

    C

     

    X

    源字段应包含十六进制字符串格式,有效字符为0123456789ABCDEF(注:字母都是大写,小写是无效的)。该字符串被视为十六进制数,左对齐传送,并且右边用零填充或截断。

    转换时,会从左到右来读取源中的所有合法的十六进制字符,如果一旦遇到一个不会合法的十六进制字符时,会立即终止读取,并且从这个非法字符到最后所有字符都会使用0来代替(另:不足目标长度时也会补0):

    DATA: c(6) VALUE 'bBAAaa' , x(3) TYPE x.

    x = c.

    WRITE: x."000000

    c = 'BBAAaa'.

    x = c.

    WRITE: x."BBAA00

     

     

     

    C

     

    String

    以左对齐的方式将源字段中的字符传输到目标字段中,但不包括尾部空格。目标的长度由传输的字符个数来决定

     

     

     

    C

     

    XString

    CX规则也适用。

    如果源中能转换的字符个数是奇数,则会在目标串的最后补一个0

     

     

     

    D

     

    C

    参考 CC

     

     

     

    D

     

    D

    未转换传送

     

     

     

    D

     

    F

    如果源字段为合法的 YYYYMMDD 的格式,则会使用该日期与 0001.01.01 日期相减,会得到一个数,这个数会存储到目标字段中;否则如果为非法日期格式,则结果为0

     

     

     

    D

     

    N

    左对齐将源中的所有字符(不管是否是合法数字字符)都会被传输到目标字段中,如果目标字段过长,则会使用0来填充,如果过短,是会截断源的右边字符。

    在传输过程中,源的尾部空格也会被传输到目标字段中。

     

     

     

    D

     

    IP

    如果源字段为合法的 YYYYMMDD 的格式,则会使用该日期与 0001.01.01 日期相减,会得到一个数,这个数会存储到目标字段中;否则如果为非法日期格式,则结果为0

    另外,如果目标字段为P类型,源结果如果太大运行时会抛异常

     

     

     

    D

     

    T

    不支持该类型间转换,将导致语法检查错误信息或运行时错误

     

     

     

    D

     

    X

    DI,再IX

     

     

     

    D

     

    String

    参考CString

     

     

     

    D

     

    XString

    DI,再IXString

     

     

     

    F

     

    C

    先将源字段转换为<±尾数部分>E±<指数部分(至少占两位)>的格式,然后右对齐传送给C类型字段。

    转换后的尾数小数格式(其小数的整数部分只有一位)取值范围为(-10,-1]0[110)(区间包括小数)

    在转尾数部分时,被截部分会使用四舍五入法进行取舍

    F为正数时,尾数部分的正数会自动忽略,但指数总是带符号的

    目标字段长度至少应为5字节(当F0时)或者是6字节(当F0时)

    如果目标字段长度小于最小长度(5或者6字节时),则目标字段结果使用*填充

    如果F转尾数部分后,尾数部分的小数位最多不能超过16位(如果多余16位,第17位及后面的会以四舍五入方式截断),且不足时补0,如果目标字段长度超过22字节(F为正时)或23字节(F为负时)时,左边会补空格

     

    DATA: f VALUE '-0.0' TYPE f,c(5)."0E+00

    DATA: f VALUE '-0.155' TYPE f,c(5)."*****

    DATA: f VALUE '-0.155' TYPE f,c(6)."-2E-01

    DATA: f VALUE '-0.155' TYPE f,c(7)." -2E-01

    DATA: f VALUE '-0.155' TYPE f,c(8)."-1.6E-01

    DATA: f VALUE '-0.155' TYPE f,c(9)."-1.55E-01

    DATA: f VALUE '-0.155' TYPE f,c(10)."-1.550E-01

    DATA: f VALUE '-0.155' TYPE f,c(24)." -1.5500000000000000E-01

     

     

     

    F

     

    D

    FI,再ID

     

     

     

    F

     

    F

    不会发生转换

     

     

     

    F

     

    N

    先将源字段F通过四舍五入的方式转换为最接近的整数,然后以右对齐的方式将F转换整数的绝对值传输到目标字段中。如果目标字段过长,则会使用0填充左边,如果过短,则会将左边截断。

     

     

     

    F

     

    I

    先将源字段F通过四舍五入的方式转换为最接近的整数,然后存储到目标字段中。如果超过目标字段的取值范围,则运行时会抛异常

     

     

     

    F

     

    P

    将源字段F以四舍五入的方式转换为P类型的数据。但不能超出P的取值范围,否则运行时会抛异常

     

     

     

    F

     

    T

    FI,再IT

     

     

     

    F

     

    X

    FI,再IX

     

     

     

    F

     

    String

    参考FC。转换后目标字段的长度为22(为正数时)、23(为负数时)

     

     

     

    F

     

    XString

    FI,再IXString

     

     

     

    N

     

    C

    参看 CC

     

     

     

    N

     

    D

    参看 CD

     

     

     

    N

     

    F

    参看 CF

     

     

     

    N

     

    N

    右对齐传送(包括局部空格),并在左边用0填充或截断

     

     

     

    N

     

    IP

    分别参看 CI或者 CP

     

     

     

    N

     

    T

    参看 CT

     

     

     

    N

     

    X

    NI,再IX

     

     

     

    N

     

    String

    参看 CString

     

     

     

    N

     

    XString

    NI,再IXString

     

     

     

    P

     

    C

    右对齐方式传输。当P为负数时,最后一位必为减号“-”;当P为正数且C足够长时,最后一位可以是空格,如果不够,则不会有这个空格。

    如果目标字段过长,左边会补空格,如果过短,左边会被截断,且此时第一位用一个星号*表示。

    注:不管目标字段固定长度有多长,也不会千分位分隔符出现

    DATA: p(4) TYPE p DECIMALS 4 VALUE '123.4567',c(1)."*

    DATA: p(4) TYPE p DECIMALS 4 VALUE '123.4567',c(5)."*4567

    DATA: p(4) TYPE p DECIMALS 4 VALUE '123.4567',c(6)."*.4567

    DATA: p(4) TYPE p DECIMALS 4 VALUE '123.4567',c(7)."*3.4567

    DATA: p(4) TYPE p DECIMALS 4 VALUE '123.4567',c(8)."123.4567

    DATA: p(4) TYPE p DECIMALS 4 VALUE '123.4567',c(9)."123.4567

    DATA: p(4) TYPE p DECIMALS 4 VALUE '123.4567',c(10)."123.4567

     

    DATA: p(4) TYPE p DECIMALS 4 VALUE '-123.4567',c(2)."*-

    DATA: p(4) TYPE p DECIMALS 4 VALUE '-123.4567',c(3)."*7-

    DATA: p(4) TYPE p DECIMALS 4 VALUE '-123.4567',c(9)."123.4567-

    DATA: p(4) TYPE p DECIMALS 4 VALUE '-123.4567',c(10)."123.4567-

     

     

     

    P

     

    D

    PIID

     

     

     

    P

     

    F

    先将P格式化成 <±尾数部分>E±<指数部分> 格式的F,再对尾数部分的小数部分的第17位(如果小数位足够17位时情况下,没有就补016位)四舍五入

     

    DATA: p(16) TYPE p DECIMALS 14 VALUE '-10000.0123456781235',f  TYPE f." -1.0000012345678124E+04

    DATA: p(16) TYPE p DECIMALS 14 VALUE '10000.0123456781235',f  TYPE f."  1.0000012345678124E+0

    DATA: p(16) TYPE p DECIMALS 14 VALUE '-1.01234567890123',f  TYPE f." -1.0123456789012300E+00

     

     

     

    P

     

    N

    四舍五入将P转换为整数,然后将其绝对值右对齐传输到目标中。不够时左边补0,超长时截断左边。

     

     

     

    P

     

    I

    四舍五入将P转换为整数,然后存储到目标字段中。如果超过I取值范围,则抛异常

     

     

     

    P

     

    P

    四舍五入将源字段小数部分格式化成目标字段的小数部分,然后存储到目标字段中。如果超出目标字段的取值范围,则运行时抛异常

    DATA: p(4) TYPE p  VALUE '12.34567' DECIMALS 5,p2(4)  TYPE p DECIMALS 4."12.3457

     

     

     

    P

     

    T

    PI,再IT

     

     

     

    P

     

    X

    PI,再IX

     

     

     

    P

     

    String

    右对齐方式传输。当P为负数时,最后一位必为减号“-”;当P为正数时,最后一位是空格。转换时不带千分位分隔符

     

     

     

    P

     

    XString

    PI,再IXString

     

     

     

    T

     

    C

    参考 CC

     

     

     

    T

     

    D

    不支持该类型间转换,将导致语法检查错误信息或运行时错误

     

     

     

    T

     

    F

    如果源字段T只包括数字(不会验证其有效性,如256060都可以),则会按着 hhmmss 格式求秒数:hh*3600+mm*60+ss ,再将结果存储到目标字段中。

    如果源字段T只包括了其他非数字,则结果为0

     

    DATA: t TYPE t  VALUE '256060',f TYPE f."  9.3660000000000000E+04

     

     

     

    T

     

    N

    将源字段左对齐传输到目标字段中,包括空格。如果目标过长,则右边补0,如果过短,右边会被截断

     

     

     

    T

     

    I

    如果源字段T只包括数字(不会验证其有效性,如256060都可以),则会按着 hhmmss 格式求秒数:hh*3600+mm*60+ss ,再将结果存储到目标字段中。

    如果源字段T只包括了其他非数字,则结果为0

     

     

     

    T

     

    P

    如果源字段T只包括数字(不会验证其有效性,如256060都可以),则会按着 hhmmss 格式求秒数:hh*3600+mm*60+ss ,再将结果存储到目标字段中。

    如果源字段T只包括了其他非数字,则结果为0

    如果超过目标字段大小,则运行时会抛异常

     

     

     

    T

     

    T

    不会发生转换

     

     

     

    T

     

    X

    TI,再IX

     

     

     

    T

     

    String

    参考CString

     

     

     

    T

     

    XString

    TI,再IXString

     

     

     

    X

     

    C

    将源字段中每4位转换成十六进制的字符 0~9A~F,然后左对齐传输到目标字段中。如果目标字段过长,则右边补空格,如果过短,则右边会被截断

     

     

     

    X

     

    D

    XIID

     

     

     

    X

     

    F

    XIIF

     

     

     

    X

     

    N

    XIIN

     

     

     

     

    X

     

    I

    只是将源字段中最后4个字节转换为整数,如果源不足4字节,则左边会补十六进制04字节后再进行转换。

    源的取值可以是:"00000000" to "7FFFFFFF" ,即 0~+2 147 483 647"80000000" to "FFFFFFFF",即 -1~-2 147 483 648

     

    DATA: x(1) TYPE x  VALUE '10',i TYPE i."        16

     

     

     

    X

     

    P

    XIIP

     

     

     

    X

     

    T

    XIIT

     

     

     

    X

     

    X

    左对齐传送,如有必要,右边用X'00'进行填充或截断

     

     

     

    X

     

    String

    将源字段中每4位转换成十六进制的字符 0~9A~F,然后左对齐传输到目标字段中。传输的字符数决定了目标字段的长度

     

     

     

    X

     

    XString

    左对齐传送。传输的字符数决定了目标字段的长度

     

     

     

    I

     

    I

    不会发生类型转换

     

     

     

    I

     

    P

    将源以P类型格式化后存入目标字段中。如果源字段大小超出了目标取值范围,则运行时抛出异常

     

     

     

    I

     

    F

    将源字段以F类型格式化后存储到目标字段中

     

     

     

    I

     

    C

    右对齐方式传输(不包括千分位符号)。当I为负数时,最后一位必为减号“-”;当I为正数且C足够长时,最后一位可以是空格,如果不够,则不会有这个空格。

    如果目标字段过长,左边会补空格,如果过短,左边会被截断,且此时第一位用一个星号*表示。

    DATA: i TYPE i VALUE '123',c(1)."*

    DATA: i TYPE i VALUE '123',c(2)."*3

    DATA: i TYPE i VALUE '123',c(3)."123

    DATA: i TYPE i VALUE '123',c(4)."123

    DATA: i TYPE i VALUE '123',c(5)." 123

     

    DATA: i TYPE i VALUE '-123',c(2)."*-

    DATA: i TYPE i VALUE '-123',c(3)."*3-

    DATA: i TYPE i VALUE '-123',c(5)." 123-

     

     

     

    I

     

    N

    右对齐将源字段的绝对值传输到目标字段中。如果目标字段过长,则在左边补0,如果过短,则将左边截断

     

     

     

    I

     

    D

    此时I的取值范围只能为1 ~ 3652060,如果超过此范围,则D会以0来填充。如果I有效,则会从0001.01.01日期加上这个天数,则会将得到日期存储到D

     

     

     

    I

     

    T

    I以除86400的余数来表示从午夜00:00:00所经历的秒数,从而转换成相应的时间点后存储到T中。

     

    DATA: i TYPE i VALUE '1',t  TYPE t."000001

    DATA: i TYPE i VALUE '3601',t  TYPE t."010001

    DATA: i TYPE i VALUE '86399',t type t."235959

    DATA: i TYPE i VALUE '86400',t type t."000000

    DATA: i TYPE i VALUE '86401',t type t."000001除以86400后得余数1,以1来计算时间点

     

     

     

    I

     

    X

    I4个字节以高字节序(即人的阅读习惯顺序,程序中的赋值方式只能是高字节序方式)转换为十六进制后,以右对齐方式存储到X字段中。如果X过长,则左边使用十六进制0来填充,如果太短,则会截断左边

     

     

     

    I

     

    String

    右对齐方式传输(不包括千分位符号)。当I为负数时,最后一位为减号“-”;当I为正数时(包括0),最后一位是空格。

     

     

     

    I

     

    XString

    I4个字节以高字节序(即人的阅读习惯顺序,程序中的赋值方式只能是高字节序方式)转换为十六进制后存储到X字段中

    如果I为负数,则目标长度为8。如果I为正数,则目标长度可能为2468

     

    DATA: i TYPE i VALUE '0',xstr TYPE xstring."00

    DATA: i TYPE i VALUE '1',xstr TYPE xstring."01

    DATA: i TYPE i VALUE '256',xstr TYPE xstring."0100

    DATA: i TYPE i VALUE '65536',xstr TYPE xstring."010000

    DATA: i TYPE i VALUE '16777216',xstr TYPE xstring."01000000

     

    DATA: i TYPE i VALUE '-1',xstr TYPE xstring."FFFFFFFF

    DATA: i TYPE i VALUE '-256',xstr TYPE xstring."FFFFFF00

    DATA: i TYPE i VALUE '-65536',xstr TYPE xstring."FFFF0000

    DATA: i TYPE i VALUE '-16777216',xstr TYPE xstring."FF000000

     

     

     

    String

     

    I

    参考CI,并且,如果源字段的长度为0,则结果也为0

     

     

     

    String

     

    P

    参考CP,并且,如果源字段的长度为0,则结果也为0

     

     

     

    String

     

    F

    参考CF,并且,如果源字段的长度为0,则结果也为0

     

     

     

    String

     

    C

    参考CC,与此规则不同的是,源字段的尾部空格也会被传输到目标字段中如果源字段的长度为0,则目标字段为会使用空格来填充

     

     

     

    String

     

    N

    参考CN源字段的尾部空格也会被传输到目标字段中。如果源字段的长度为0,则目标字段为会使用0来填充

     

     

     

    String

     

    D

    参考CD,与此规则不同的是,源字段的尾部空格也会被传输到目标字段中。如果源字段的长度为0,则目标字段为会使用0来填充

     

     

     

    String

     

    T

    参考CT,并且源字段的尾部空格也会被传输到目标字段中。如果源字段的长度为0,则目标字段为会使用0来填充

     

     

     

    String

     

    X

    参考CX,如果源字段长度为0,则会使用十六进制的0来填充目标字段

     

     

     

    String

     

    String

    不会发生转换。只是目标字段会重新指向源字段字符串

     

     

     

    String

     

    XString

    参考CXString。如果源字段长度为0,则目标字段的长度也会是0

     

     

     

    XString

     

    I

    参考XI,并且,如果源字段的长度为0,则结果也为0

     

     

     

    XString

     

    P

    参考XP,并且,如果源字段的长度为0,则结果也为0

     

     

     

    XString

     

    F

    参考XF,并且,如果源字段的长度为0,则结果也为0

     

     

     

    XString

     

    C

    参考XC如果源字段的长度为0,则目标字段为会使用空格来填充

     

     

     

    XString

     

    N

    参考XN源字段的尾部空格也会被传输到目标字段中。如果源字段的长度为0,则目标字段为会使用0来填充

     

     

     

    XString

     

    D

    参考XD。如果源字段的长度为0,则目标字段为会使用0来填充

     

     

     

    XString

     

    T

    参考XT。如果源字段的长度为0,则目标字段为会使用0来填充

     

     

     

    XString

     

    X

    参考XX,如果源字段长度为0,则会使用十六进制的0来填充目标字段

     

     

     

    XString

     

    String

    参考XString如果源字段长度为0,则目标字段的长度也会是0

     

     

     

    XString

     

    XString

    参考XXString。如果源字段长度为0,则目标字段的长度也会是0

     

     

    转载于:https://www.cnblogs.com/jiangzhengjun/p/4292854.html

    展开全文
  •   基本数据类型之间是存在固定的转换规则的,现总结出以下6条规则。无论是哪个程序,将这6个规则套用进去,问题迎刃而解。 八种基本数据类型中,除了boolean类型不能转换,剩下七种类型之间都可以进行转换


    前言

    通过学习Java中的四类八种数据类型,我们知道一个数据给一个变量赋值的时候存在三种不同的情况:

    • 类型一致,不存在类型转换
    • 自动类型转换,小容量自动赋值给大容量
    • 强制类型转换,大容量赋值给小容量,可能导致的的结果就是精度损失

    一、基本数据类型转换

      基本数据类型之间是存在固定的转换规则的,现总结出以下6条规则。无论是哪个程序,将这6个规则套用进去,问题迎刃而解。

    1. 八种基本数据类型中,除了boolean类型不能转换,剩下七种类型之间都可以进行转换

    2. 如果整数型字面量没有超过byte、short、char的取值范围,可以直接将其赋值给byte、short、char类型的变量

    3. 小容量向大容量转换称为自动类型转换,容量从小到大排序为:byte<short(char)<int<long<float<double,其中short和char都占用两个字节,但是char可以表示更大的正整数。

    4. 大容量转换为小容量,称为强制类型转换,编写时必须添加“强制类型转换符”,但运行时可能会出现精度损失,谨慎使用。

    5. byte、short、char类型混合运算时,先各自转换成int类型再做运算

    6. 多种数据类型混合运算时,各自先转换成容量最大的那一种再做运算

    二、习题

    1. 下列程序有什么错误?
    short s1=1;
    s1=s1+1;
    

    报错
    在这里插入图片描述
      因为s1是short类型,1是int类型,short和int混合运算时,short会自动转换为int类型,所以s1+1编译器检测出是int类型,int类型是无法赋值给short类型的变量s1。所以需要强制类型转换,即:

    short s1 = 1;
    //注意强制类型转换的格式
    s1 =(short) (s1 + 1) ;
    
    1. 为什么char类型的变量可以存储一个中文的汉字,为什么?

      java中的文字采用unicode编码,一个中文占用2个字节,char类型在java中就是占用两个字节,所以java中的char类型完全可以容纳一个汉字。

    1. flaot f=1.0有什么错?long a=2147483648有什么错?

      在java语言中,有这样一条规定,只要是浮点型的字面量,例如1.0、3.14等默认会被当做double类型处理,如果想让程序将其当做float类型处理,需要在字面量后面添加f\F,或者使用强制类型转换。整数型字面值默认当做int类型处理,如果以long形式表示,需要在字面值后面添加L\l

    展开全文
  • 一、混合运算的类型转换规则  1.运算过程中,当某个二元运算符两边操作数类型不同但属于类型相容时,系统先将精度低操作数变换到与另一个操作数精度相同,然后再进行运算。  混合运算类型转换规则: ...

    系统自动类型转换:混合运算的类型转换,赋值类型转换,强制类型转换

     

    一、混合运算的类型转换规则

      1.运算过程中,当某个二元运算符两边的操作数类型不同但属于类型相容时,系统先将精度低的操作数变换到与另一个操作数精度相同,然后再进行运算。

        混合运算类型转换规则:

    • 字符可以作为整数参与数值运算,整数值为其ASCII码
    • 操作数为字符或短整形时,系统自动转换成整形。
    • 操作数为实型时,系统自动转换成双精度型。
    • 其余情况,当两数操作数类型不同时,将精度低(或表示范围小的)的操作数的数据类型变换到与另一操作数类型相同再进行运算

      2.example

     1 char c1,c2;
     2 int i1,i2;
     3 float x1,x2;
     4 x2=c1*i1+c1*x1+c1*c2;
     5 
     6 转换过程:     c1转换成整型,完成c1*i1,结果表示为t1;
     7              c1与x1均转换成双精度型,完成c1*x1,结果表示为t2;
     8              c1与c2均转换成整型,完成c1*c2,结果表示为t3;
     9         然后:将t1转换成双精度型,完成t1+t2,结果表示为t4;
    10                  再将t3转换成双精度型,完成t3+t4,
    11         最后:结果转换成单精度型赋值给x2

     




     

    二、赋值类型转换

       1.系统自动进行类型转换规则:

    • 实型数赋值给整型变量:取整,注意溢出
    • 整型数赋值给实型变量:先转换为实型数
    • 字符型数赋值给整型变量:ASCII码为依据,分为两种情况,符号位是0/1时不同。
    • 绝对值较大的数赋值给表达范围较小的数据类型时,注意溢出

          在赋值运算中,当左值与右值类型不一致时,系统将按照左值的类型,自动进行强制转换。




     

    三、强制类型转换

      1.强制类型转换运算符格式

          (type)表达式

      2.作用:将表达式强制转换成type类型,但表达式的值及其类型不变

      3.注意:::强制类型转换不改变表达式本身的值类型,而是产生一个临时变量,用来暂存转换后的值,该临时变量被引用后即自动释放。

    1 int a=6,b=7;
    2 float x;
    3 x=(float)a/(float)b;
    4 执行强制类型转换后,a,b的值及类型都未改变。而是各自产生一个临时变量,用这两个临时变量的值进行运算

     

         

     

    转载于:https://www.cnblogs.com/southcyy/p/10249117.html

    展开全文
  • 整形数据(int,long,short):...由此引出的问题:隐式的类型转换,进制转换,以及数据类型的基本知识点,将在下一篇博客中总结。1、混合运算的类型转换规则 当二元运算符两边的操作数类型不同,但类型相容时,系统

    整形数据(int,long,short):以整数的补码形式在计算机中存放。
    实型数据(double,float):(浮点型数据)以规范化的二进制指数的形式在计算机中存放。
    字符型数据(char):按其对应整数的形式存放。
    由此引出的问题:隐式的类型转换,进制转换,以及数据类型的基本知识点,将在下一篇博客中总结。

    1、混合运算的类型转换规则
    当二元运算符两边的操作数类型不同,但类型相容时,系统将数据类型转化为一致后进行运算,具体规则如下:
    (1)、字符可以作为整数参与数值运算,整数的值为其ASCII 值。
    (2)、操作数为字符或者短整型时,系统自动将其转化为整型。
    (3)、操作数为单精度类型时,系统自动将其转换成双精度型。
    (4)、当两边操作数的类型不同时,将精度低(表示范围小)的操作数的数据类型转换为与另一个操作数类型相同时再进行运算。

    系统默认转换规则

    2、赋值的类型转换规则
    (1)、实型数赋值给整数变量时,仅取整数部分赋值,相当于取整,但是如果整数部分超过整形变量的取值范围时,发生溢出,结果错误。
    (2)、整数赋值给实型变量事,将整数转化为实数再赋值。
    (3)、字符型数据赋值给整形变量时,将字符转换为整形,分为两种情况。一种是:对于无符号的字符数据,低位字节不变,高位字节补0,另一种:对于有符号的字符数据,若符号位为0,则与无符号数据的转换规则相同,若符号位为1,则低位字节不变,高位字节全部置1。
    (4)、无符号整形或长整形数赋值给整形变量时,若数据在整形的取值范围内,则无需转换,且结果正确;但若超出取值范围,则发生溢出,赋值结果错误。

    展开全文
  • 类型的语言有以下几个要求:变量或常量必须有类型:要求声明变量或常量时必须声明类型,...但是在实际生产中,经常需要在不同类型的值之间进行操作,这就需要一种新的语法来适应这种需要,这个语法就是数据类型转...
  • 当然,在ABAP编程中也同样涉及到数据之间相互转换,在不同的数据对象之间赋值,系统会自动进行类型转换转换过程遵照固定规则进行,例如将一个C类型数据赋值也N类型对象,只有数字字符被传递,其它字符则被忽略。...
  • 数据类型的转换 C语言程序设计 数据类型的转换 隐式转换 什么情况下发生 运算转换------不同类型数据混合运算时 赋值转换------把一个值赋给与其类型不同的变量时 输出转换------输出时转换成指定的输出格式 函数...
  • 首先,由于JavaScript是弱类型语言(弱类型的语言的东西没有...简单定义: 不同数据类型的数据在做运算的时候可以进行默认的数据类型的转换。 隐式转换通常遵循以下几点规则: 1.数字+字符串:数字转换为字符串。 v
  • 赋值兼容规则

    2019-09-23 23:31:40
    在一定条件下,不同类型的数据之间可以进行类型转换,如可以将整型数据赋给双精度型变量。在赋值之前,先把整型数据转换成双精度型数据,然后再把它赋给双精度型变量。这种不同类型数据之间的自动转换赋值,称为...
  • 类型的语言有以下几个要求:变量或常量必须有类型:要求声明变量或常量时必须声明类型,...但是在实际生产中,经常需要在不同类型的值之间进行操作,这就需要一种新的语法来适应这种需要,这个语法就是数据类型转...
  • ABAP数据转换规则

    2019-01-17 14:56:00
    可以将基本数据类型的源字段内容赋给其它基本数据类型的目标字段(除了数据类型 D 无法赋给数据类型 T,反之亦然)。ABAP/4 也支持结构化数据和基本数据对象之间或结构不同的数据对象之间的赋值。 对于每一赋值语句...
  • Java基本类型转换规则

    2013-09-24 20:55:08
    1、基本数据类型的转换是指由系统根据转换规则自动完成,不需要程序员明确地声明不同数据类型之间的转换。转换在编译器执行,而不是等到运行期再执行。 2、基本数据类型的转换在赋值、方法调用和算术运算三种情况下...
  • 本文实例讲述了Python变量、数据类型数据类型转换相关函数用法。分享给大家供大家参考,具体如下: python变量的使用不需要进行类型声明(类型名 变量名),给一个变量名赋什么值就是什么类型。 变量的赋值使用 =...
  • Java类型转换基本规则

    千次阅读 2013-11-15 21:34:55
    1、基本数据类型的转换是指由系统根据转换规则自动完成,不需要程序员明确地声明不同数据类型之间的转换。转换在编译器执行,而不是等到运行期再执行。  2、基本数据类型的转换在赋值、方法调用和算术运算三种情况...
  • C++数据类型转换

    2020-04-29 18:15:26
    若两种类型的字节数不同转换成字节数高的类型 字节数相同,且一种有符号,一种无符号,则转换成无符号类型 浮点运算都是以双精度进行的(float都要转换成double在进行运算 ) char型和short型参与运算时,必须先...
  • 1.若参与运算量的类型不同,则先转换成同一类型,然后进行运算 2.转换数据长度增加方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型再进行运算 3.所有浮点运算都是以双精度进行,...
  • 若参与运算的数据类型不同,则先转换成同一类型,然后进行运算。转换按数据长度增加方向进行,以保证精度不降低。例如int型和long型运算时,先把int量转成long型后再进行运算。所有浮点运算都是以双精度进行,...
  • C++中隐式转换规则

    2020-03-10 21:44:40
    1.算术表达式中,不同数据类型进行计算时,要首先转换成同一种类型,才能计算(低类型的向高类型转换) 2.赋值表达式中,右边表达式的值隐式的转换为左边变量的类型,然后赋值给左边 3.函数调用中,形实结合的过程...
  • 数据类型不同的变量进行赋值时,会发生数据类型转换数据类型转换有两种自动类型转换和强制类型转换。 自动类型你转换(隐式) 1.特点:代码不需要进行处理。 2.规则:数据范围从小到大。 public class Demo01...
  • 基本数据类型的转换规则 小结:通过上面案例我们可以得出数据类型的转换关系(取值范围从小到大) (1)当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围大的变量时, int i = ‘A’;//...
  • 数据类型转换1 自动转换(隐式转换)1.2 转换规则2 强制转换3 ASCII编码表 变量定义赋值的时候, 值得在取值范围之内. 如果超出了接收类型的范围, 需要强转 1 自动转换(隐式转换) 代码执行过程中 取值范围小的类型 ...
  • 1.若参与运算的数据类型不同,则先转换成同一类型,然后进行运算。 2.转换按数据长度增加方向进行,以保证精度不降低。例如int型和long型运算时,先把int量转成long型后再进行运算。 3.所有浮点运算都是以双精度...
  • 自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换规则: 1、若参与运算量的类型不同,则先转换成同一类型 2、转换按数据长度增加的方向进行,以保证精度不降低。如int型与long型运算时,...
  • 字母区分大小写,即同一字母大小写代表不同的变量; 尽可能根据变量数据特点命名,可提高程序可读性; 变量名不要和PythonBIF重名,虽然Python中可以对BIF进行赋值,但是实际编程中很可能会...
  • 类型转换

    2019-09-28 20:08:45
    两种不同数据类型的数据进行运算时, 需要首先变成同一数据类型, 转变规则是:向着位数高的类型转换 byte b = 1; //赋值1的时候会自动判断,判断1是不是在b的范围内, 1是常量是固定的,所以可以赋值 b = ...
  • 2.1 MATLAB的数据类型

    2019-09-22 21:34:59
    支持不同数据转换 2.1.1 变量与常量 1.变量 无须事先声明 无须指定变量类型,MATLAB会自动根据变量的赋值与相关操作来确定变量的类型 命名规则: 区分大小写 必须字母开头,可以包...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 169
精华内容 67
关键字:

不同数据类型的赋值转换规则