精华内容
下载资源
问答
  • 隐式类型转换的规则

    2009-10-06 14:56:03
    当我们用一个变量给另外一个类型不同的变量进行赋值时,隐式类型转换...通常,隐式类型转换的规则遵循“小转大”,即长度较小的类型会自动转换为长度较大的类型,而反之则被认为是编译错误。一般规则如下图所示: ...

    当我们用一个变量给另外一个类型不同的变量进行赋值时,隐式类型转换会自动发生。通常,隐式类型转换的规则遵循“小转大”,即长度较小的类型会自动转换为长度较大的类型,而反之则被认为是编译错误。一般规则如下图所示:

    展开全文
  • C语言隐式类型转换的规则

    千次阅读 2016-04-26 11:17:02
    C语言隐式类型转换的规则隐式类型转换规则......

    C语言隐式类型转换的规则


    隐式类型转换规则:
    1.如果一个操作数的类型是long double ,就把另一个操作数转换为long double 类型;
    2.否则,如果一个操作数的类型是double,就把另一个操作数转换为double类型;
    3.否则,如果一个操作数是float,就把另一个操作数转换为float类型;
    4.否则,如果两个操作数的类型都是带符号的整数或无符号的整数,就把级别较低的操作数转换为另一个操作数的类型.
    无符号整数类型的级别从低到高为:usigned char,shrot,int,long,long long
    有符号整数类型的级别与对应的无符号整数类型级别一致;
    5.否则,如果带符号整数类型的操作数级别低于无符号整数类型的级别,就把带符号整数类型的操作数转换为无符号整数类型;
    6.否则,如果带符号整数类型的值域包含了无符号整数类型所表示的值,就把无符号整数类型转换为带符号整数类型;
    7,否则,两个操作数都转换为带符号整数类型对应的无符号整数类型;

    摘抄自《C语言入门经典》第五版 56页

    展开全文
  • 大多数隐式转换的规则: 先说结论:大多数情况下,隐式转换都遵循这个规则,当然有特殊情况,特殊情况特殊对待就行了,当使用==判等时,会转成同类型再比较 1. 对象和布尔值比较 对象和布尔值进行比较时,对象先...

    虽然开发中基本都是用的===全等,==很少用,基本不用,但奈何有些面试题考的很刁钻,我就来做个小总结把

    大多数隐式转换的规则:

    先说结论:大多数情况下,隐式转换都遵循这个规则,当然有特殊情况,特殊情况特殊对待就行了,当使用==判等时,会转成同类型再比较
    在这里插入图片描述
    1. 对象和布尔值比较

    对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字

    [] == true; //false []转换为字符串'',然后转换为数字0,true转换为数字1,所以为false
    

    2. 对象和字符串比较

    对象和字符串进行比较时,对象转换为字符串,然后两者进行比较。

    [1,2,3] == '1,2,3' // true [1,2,3]转化为'1,2,3',然后和'1,2,3', so结果为true;
    

    3. 对象和数字比较

    对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行比较。

    [1] == 1; // true `对象先转换为字符串再转换为数字,二者再比较 [1] => '1' => 1 所以结果为true
    

    4. 字符串和数字比较

    字符串和数字进行比较时,字符串转换成数字,二者再比较。

    '1' == 1 // true
    

    5. 字符串和布尔值比较

    字符串和布尔值进行比较时,二者全部转换成数值再比较。

    '1' == true; // true
    

    6. 布尔值和数字比较

    布尔值和数字进行比较时,布尔转换为数字,二者比较。

    true == 1 // true
    

    以上把四种类型两两不同的比较了一遍,都印证了我一开始说的隐式转换规则,没毛病



    转boolean值为false的情况:

    下面6种值转化为布尔值时为false,其他转化都为true

    1、undefined(未定义,找不到值时出现)

    2、null(代表空值)

    3、false(布尔值的false,字符串"false"布尔值为true)

    4、0(数字0,字符串"0"布尔值为true)

    5、NaN(无法计算结果时出现,表示"非数值";但是typeof NaN===“number”)

    6、""(双引号)或’’(单引号) (空字符串,中间有空格时也是true)

    console.log(!!undefined)    //false
    console.log(!!null)        //false
    console.log(!!"")  		 //false
    console.log(!!false)    //false
    console.log(!!NaN)    //false
    console.log(!!0)     //false
    

    这样就好理解以下情况了:

    console.log(![])   //true
    console.log(!{})   //true
    



    复杂数据类型的转换规则:

    1.先使用valueOf()方法获取原始值
    2.再使用toString()转成字符串
    3.在使用number把字符串转成数字

    console.log([1,2].valueOf())    //[1,2]
    console.log([1,2].valueOf().toString())   //1,2
    
    console.log({name:"test"}.valueOf())   //{name:”test“}
    console.log({name:"test"}.valueOf().toString())  //[object Object]
    
    console.log([].valueOf())    //[]
    console.log([].valueOf().toString())   //""
    
    console.log({}.valueOf())   //{}
    console.log({}.valueOf().toString())  //[object Object]
    

    这样就解释如下这种奇怪的现象了

    [] == false  //true
           
    {} == false  //false  
    



    特殊情况:

    当然上述也说了大多数情况下遵循的规则而已,也有很多特殊情况,我们来特殊区别一下:

    ![] == false   //true   多了一个!,此时[ ]会优先转成boolean值,
    所以为true,取反就是false了,结果为true
    
    []==![] //true   因为有!,优先级最高,![]结果为false,最终转换成 [] == false 的比较,
    按照开篇多数情况下的规则图转换,结果为true
    
    []==[]   //false   比较的是地址
    {}=={}   //false  比较的是地址
    



    到目前为止,以下的特殊情况,你应该都能判断出来了:

    ///太坑
    console.log([]==0)   //true
    console.log(![]==0)  //true
    
    //神坑
    console.log([]==![])   //true
    console.log([]==[])   //false
    
    //史诗级坑
    console.log({}=={})    //false
    console.log({}==!{})    //false
    //相当于
    console.log({}==false)   //false
    //相当于
    console.log({}==0)    //false
    //相当于 
    console.log("[object Oject]"==0)    //false
    

    看到一篇博客,总结的比我好
    推荐看下

    展开全文
  • 虽然开发中基本都是用的===全等...大多数隐式转换的规则: 先说结论:大多数情况下,隐式转换都遵循这个规则,当然有特殊情况,特殊情况特殊对待就行了,当使用==判等时,会转成同类型再比较 1. 对象和布尔值比较 ...

    虽然开发中基本都是用的===全等,==很少用,基本不用,但奈何有些面试题考的很刁钻,我就来做个小总结把

    大多数隐式转换的规则:

    先说结论:大多数情况下,隐式转换都遵循这个规则,当然有特殊情况,特殊情况特殊对待就行了,当使用==判等时,会转成同类型再比较
    在这里插入图片描述
    1. 对象和布尔值比较

    对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字

    [] == true; //false []转换为字符串'',然后转换为数字0,true转换为数字1,所以为false
    
    • 1

    2. 对象和字符串比较

    对象和字符串进行比较时,对象转换为字符串,然后两者进行比较。

    [1,2,3] == '1,2,3' // true [1,2,3]转化为'1,2,3',然后和'1,2,3', so结果为true;
    
    • 1

    3. 对象和数字比较

    对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行比较。

    [1] == 1; // true `对象先转换为字符串再转换为数字,二者再比较 [1] => '1' => 1 所以结果为true
    
    • 1

    4. 字符串和数字比较

    字符串和数字进行比较时,字符串转换成数字,二者再比较。

    '1' == 1 // true
    
    • 1

    5. 字符串和布尔值比较

    字符串和布尔值进行比较时,二者全部转换成数值再比较。

    '1' == true; // true
    
    • 1

    6. 布尔值和数字比较

    布尔值和数字进行比较时,布尔转换为数字,二者比较。

    true == 1 // true
    
    • 1

    以上把四种类型两两不同的比较了一遍,都印证了我一开始说的隐式转换规则,没毛病



    转boolean值为false的情况:

    下面6种值转化为布尔值时为false,其他转化都为true

    1、undefined(未定义,找不到值时出现)

    2、null(代表空值)

    3、false(布尔值的false,字符串"false"布尔值为true)

    4、0(数字0,字符串"0"布尔值为true)

    5、NaN(无法计算结果时出现,表示"非数值";但是typeof NaN===“number”)

    6、""(双引号)或’’(单引号) (空字符串,中间有空格时也是true)

    console.log(!!undefined)    //false
    console.log(!!null)        //false
    console.log(!!"")  		 //false
    console.log(!!false)    //false
    console.log(!!NaN)    //false
    console.log(!!0)     //false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这样就好理解以下情况了:

    console.log(![])   //true
    console.log(!{})   //true
    
    • 1
    • 2



    复杂数据类型的转换规则:

    1.先使用valueOf()方法获取原始值
    2.再使用toString()转成字符串
    3.在使用number把字符串转成数字

    console.log([1,2].valueOf())    //[1,2]
    console.log([1,2].valueOf().toString())   //1,2
    

    console.log({name:“test”}.valueOf()) //{name:”test“}
    console.log({name:“test”}.valueOf().toString()) //[object Object]

    console.log([].valueOf())    //[]
    console.log([].valueOf().toString())   //""
    

    console.log({}.valueOf()) //{}
    console.log({}.valueOf().toString()) //[object Object]

    这样就解释如下这种奇怪的现象了

    [] == false  //true
    {} == false  //false  
    



    特殊情况:

    当然上述也说了大多数情况下遵循的规则而已,也有很多特殊情况,我们来特殊区别一下:

    ![] == false   //true   多了一个!,此时[ ]会优先转成boolean值,
    所以为true,取反就是false了,结果为true
    
    []==![] //true   因为有!,优先级最高,![]结果为false,最终转换成 [] == false 的比较,
    按照开篇多数情况下的规则图转换,结果为true
    
    []==[]   //false   比较的是地址
    {}=={}   //false  比较的是地址
    



    到目前为止,以下的特殊情况,你应该都能判断出来了:

    ///太坑
    console.log([]==0)   //true
    console.log(![]==0)  //true
    //神坑
    console.log([]==![])   //true
    console.log([]==[])   //false
    //史诗级坑
    console.log({}=={})    //false
    console.log({}==!{})    //false
    //相当于
    console.log({}==false)   //false
    //相当于
    console.log({}==0)    //false
    //相当于 
    console.log("[object Oject]"==0)    //false
    
    展开全文
  • 然后应用以下规则: 4.1如果任一操作数的类型为unsigned long int,则另一个操作数将转换为unsigned long int。 4.2 否则,如果一个操作数的类型为long int,而另一个操作数的类型为unsigned int. 4.2.1如果long int...
  • 隐式类型转换的规则 确定二元运算中的哪个操作数要转换为另一个操作数的类型是,其机制相当简单。其基本规则是,将值域较小的操作数类型转换为另一个操作数类型,但在一些情况下,两个操作数都要转换类型。 ...
  • 一个Javascript表达式中包含不同类型值进行运算时,可能会发生隐式类型转换,也可能不转换,隐式类型转换规则与操作数,运算符都相关,这是与强类型语言(Java)不同地方,Java隐式类型一般只与操作数相关,即表...
  • 隐式类型转换规则

    2019-06-03 21:05:45
    这种无需程序员手动转换,而由编译器自动转换的方式就称为隐式转换 例如1 > "0"这行代码在js中并不会报错,编译器在运算符时会先把右边的"0"转成数字0`然后在比较大小 隐式转换规则 转成string类型: +(字符串...
  • 在C语言的算术运算中,如果两...这属于隐式(implicit)类型转换的一种。本以为这是个很简单的事情,但在回答别人问题的时候发现,具体的规则如何判断(对某种类型组合会转换为哪个类型),并不是一两句话就能说清楚的。
  • 转换,C++内部数据类型遵循隐式类型转换规则,成员转换函数
  • C 语言隐式类型转换规则 C语言规定,不同类型数据需要转换成同一类型后才可进行计算,在整型实型和字符型数据之间通过类型 转换便可以进行混合运算(但不是所有类型之间都可以进行转换) .当混合不同类型变量进行...
  • 先是通过一个实例给大家讲述在MySQL隐式类型转换时遇到的陷阱,而后给大家介绍了MySQL隐式类型的规则,对大家操作mysql隐式类型的时候具有一定的参考借鉴价值,下面来一起看看吧。
  • C语言隐式类型转换规则

    千次阅读 2010-06-02 13:47:00
    C语言隐式类型转换规则C语言规定,不同类型数据需要转换成同一类型后才可进行计算,在整型、实型和字符型数据之间通过类型转换便可以进行混合运算(但不是所有类型之间都可以进行转换) <br />....
  • 在三目运算符java开发环境下可以简单理解为双目运算符的类型转换问题(便于理解)。其具体规则总结如下:  1)如果定义了数据类型变量与未定义变量数值共同参与三元运算符后双目运算,,那么返回结果...
  • javascript 中“==”带来的隐式类型转换规则 一 字符串、数字和布尔值之间转换规则(抽象操作) ToPrimitive 抽象操作ToPrimitive会检查该值是否有valueOf()方法,如果有且返回基本类型值,就使用该值进行...
  • C语言中算术运算的隐式类型转换规则 由 James Hook 发表于 2011/01/14 / 标签: C语言, 学之初, 类型转换 / 评论: (0) 在C语言算术运算中,如果两个操作数都是算术类型但具体类型不同,编译器...
  • JavaScript中运算符规则的... 这是每个学习Javascript的新手们都应该知道的一个问题,下面这篇文章主要给大家介绍了关于JavaScript中运算符规则隐式类型转换的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
  • 一、隐式类型转换 隐式类型转换也叫做自动类型转换。 1、规则: 从存储范围小类型到存储范围大类型。 2、转换方向: byte→short(char)→int→long→float→double(这里指是只有前面数据类型能随便转换成...
  • 目标转换类型:最宽数据类型为 2.用一种类型的表达式赋值给另一种类型的对象 目标转换类型:被赋值对象的类型 3.把一个表达式传递给一个函数,且表达式的类型与函数形式参数的类型不相同 目标...
  • javaScript的类型转换其实一直是很多前端开发人员很迷的地方,一会儿这里要转换,一会儿那里又要转换,总之就是一个大写的迷,因为它隐式类型转换的地方实在是太多了。 但其实它还是有规律可寻的,只要记忆一些基本...
  • JavaScript 运算符规则与隐式类型转换详解 从属于笔者的现代 JavaScript 开发:语法基础与工程实践系列文章,主要探讨 JavaScript 中令人迷惑的加减乘除与比较等常见运算中的规则隐式类型转换;本文中涉及的参考...
  • 2.在包含两种数据类型的任何运算中,低级别数据类型将提升为较高级别数据类型 从低到高:long double 、double、float、unsigned long long 、long long、unsigned long、long、unsigned int、int 当long和int...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,169
精华内容 467
关键字:

隐式类型转换的规则