zoukankan      html  css  js  c++  java
  • 3 类型转换

    1 强制类型转换

    • 强制类型转换的语法

      • (Type)var_name;
      • (Type)value;
    • 强制类型转换的结果

      • 目标类型能够容纳目标值:结果不变,如:short -> int
      • 目标类型不能容纳目标值:结果将产生截断,将高位舍弃,如:int -> short
      • 注意:不是所有的强制类型转换都能成功,当不能进行强制类型转化时,编译器将产生错误信息
      #include <stdio.h>
      
      struct TS
      {
      	int i;
      	int j;
      };
      
      struct TS ts;
      
      int main()
      {
      	short s = 0x1122;
      
      	char c = (char)s;  // 高位被截断:0x22
      	int i = (int)s;  // 0x1122
      	int j = (int)3.1415;  // 小数点后发生截断:3
      	unsigned int p = (unsigned int)&ts;  // 32位机器是4字节地址,不会发生截断,64位机器会发生截断
      	long l = (long)ts;   // error
      	ts = (struct TS)l;  // error
      
      	return 0;
      }
      

    2 隐式类型转换规则

    • 隐式类型转换:编译器主动进行的类型转换
    • 低类型到高类型的隐式类型转换是安全的,不会产生截断
    • 高类型到低类型的隐式类型转换是不安全的,会导致不正确的结果

    3 表达式中的隐式类型转换

    • 隐式类型转换的发生点

      • 算术运算式中,低类型转换为高类型
      • 赋值表达式中,表达式的值转换为左边变量的类型
      • 函数调用时,实参转换为形参的类型
      • 函数返回时,return 表达式转化为返回值类型
    • 安全的隐式类型转换

      char 
        ↓    -> int -> unsigned int -> long -> unsigned long -> float -> double
      short
      
    • 隐式类型转换分析

      #include <stdio.h>
      
      int main()
      {
      	char c = 'a';
      
      	int i = c;  //安全的隐式转换
      
      	unsigned int j = 0x11223344;
      
      	short s = j;  //不安全的隐式转换
      
      	printf("c = %c
      ", c);
      	printf("i = %d
      ", i);
      	printf("j = %x
      ", j);
      	printf("s = %x
      ", s);
      	printf("sizeof(c + s) = %d
      ", sizeof(c + s));  //同时转换成int再运算
      
      	return 0;
      }
      
      //输出结果:
      c = a
      i = 97
      j = 11223344
      s = 3344
      sizeof(c + s) = 4
      
  • 相关阅读:
    搭建mongoDB 配置副本集 replSet
    关于erlang解析json数据
    互联网精准广告定向技术
    cmd 查看端口占用情况
    nutzboot dubbo zookeeper简单使用
    一些常用名词
    小程序video置顶
    html 5 video audio
    android webview 视频相关
    微信小程序
  • 原文地址:https://www.cnblogs.com/bky-hbq/p/13582427.html
Copyright © 2011-2022 走看看