美文网首页
C 笔记十七 类型转换

C 笔记十七 类型转换

作者: 吃柠檬的鸮 | 来源:发表于2019-05-09 23:38 被阅读0次

一般来说,自动转换是指把 “ 比较窄的” 操作数转换为 “ 比较宽 ” 的操作数,并且不丢失信息的转换。
例如一个运算符的几个操作数类型不同时,需要把它们转换为某种共同的类型。

int i = 2;
float f = 3.14;

float res = i + f;  // 将整型变量 i 的值自动转换为浮点型,再计算表达式的值

需要注意的是,把较大的值赋值给较小的类型并不是非法的,但是会导致信息丢失,例如把上面的 f 赋值给 i,将导致精度丢失,编译器对此类操作可能会给出警告。

char 类型作为较小的整型,可以再算术表达式中自由使用,利用这一特性,可以使用 char 类型的变量来实现某些字符的转换。

// 将一串数字转换为相应的数值
int atoi(char s[]) {
    int i, n;
    n = 0;
    for (i = 0; a[i] >= '0' && s[i] <= '9'; ++i)
        n = n * 10 + (a[i] - '0');
}

一般情况下,如果表达式中没有 unsigned 操作数,则使用下面这些非正式的规则就足够了:

  1. 如果其中一个操作数的类型为 long double,则将另一个操作数转换为 long double
  2. 如果其中一个操作数的类型为 double,则将另一个操作数转换为 double 类型;
  3. 如果其中一个操作数的类型为 float,则将另一个操作数转换为 float 类型;
  4. charshort 类型的操作数转换为 int 类型;
  5. 如果其中一个操作数的类型为 long,则将另一个操作数也转换为 long 类型。

有一个例外是,表达式中的 float 类型操作数不会自动转换为 double 类型。使用 float 类型主要是为了在使用较大的数组时节省存储空间,有时也为了节省机器执行时间。

如果表达式中存在 unsigned 类型的操作数,由于带符号值和无符号值之间的比较运算是机器相关的,因此它们取决于机器中不同整数类型的大小。

无论是否进行符号扩展,字符型变量都将被换成整型变量。

在任何表达式中都可以使用 强制类型 转换进行显式类型转换:

(TYPENAME) expression

强制类型转换运算符与其他一元运算符具有相同的优先级。

相关文章

  • C 笔记十七 类型转换

    一般来说,自动转换是指把 “ 比较窄的” 操作数转换为 “ 比较宽 ” 的操作数,并且不丢失信息的转换。例如一个运...

  • C++入门13 -- 类型转换,新特性,异常,智能指针

    类型转换 C语言类型转换:(type)expressionexpression(type) C++语言类型转换:x...

  • Week1

    周一笔记 printf函数 printf函数的格式 scanf函数 类型转换 C语言当中,大类型转换成小类型会丢失...

  • C++类型转换

    C++类型转换 C++为了规范C中的类型转换,加强类型转换的可视性,引入了四种强制类型转换操作符:static_c...

  • 数据类型转换

    写在前面 C/C++编程中常见数据类型转换,包括隐式类型转换和显式类型转换。 1. 隐式类型转换 隐式类型转换在以...

  • 十一、类型转换

    1、强制类型转换 C方式的强制类型转换 C方式强制类型转换存在的问题 过于粗暴:任意类型之间都可以进行转换,编译器...

  • C/C++类型转换及类型转换重载

    C/C++类型转换 C风格类型转换 C语言中的类型转换, 实际上强迫编译器根据程序员的选择来解释目标. C语言中仅...

  • (六)C++中的类型转换、IO流与STL标准模板库

    C++中的类型转换与STL标准模板库 一、C++类型转换 在C++中类型转换包含 static_cast、cons...

  • C++中的类型转换

    C++中的类型转换 显示转换 命名的强制类型转换 static_cast dynamic_cast const_c...

  • static_cast、dynamic_cast、reinter

    C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: C++风格的类型转换提供了4种类型转...

网友评论

      本文标题:C 笔记十七 类型转换

      本文链接:https://www.haomeiwen.com/subject/pscnoqtx.html