类型转换

赋值中的强制类型转换

被刻印的时光 ゝ 提交于 2020-01-12 07:17:27
赋值中的类型转换 当 赋值运算符 两边的运算对象类型不同时,将要发生类型转换, 转换的规则是:把赋值运算符右侧 表达式 的类型转换为左侧 变量 的类型。具体的转换如下: (1) 浮点型 与 整型 ● 将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分(是直接舍弃,编译器不会自动四舍五入), 只保留整数部分。将 整型 值赋给 浮点型 变量,数值不变,只将形式改为浮点形式, 即小数点后带若干个0。注意:赋值时的类型转换实际上是强制的。 (2) 单、 双精度浮点型 ● 由于C语言中的浮点值总是用双精度表示的,所以float 型数据只是在尾部加0延长为double型数据参加运算,然后直接赋值。double型数据转换为float型时,通过截尾数来实现,截断前要进行四舍五入操作。 (3) char型与int型 ● int型数值赋给char型 变量 时,只保留其最低8位,高位部分舍弃。 ● char型数值赋给int型 变量 时, 一些 编译程序 不管其值大小都作正数处理,而另一些编译程序在转换时,若char型数据值大于127,就作为负数处理。对于使用者来讲,如果原来char型数据取正值,转换后仍为正值;如果原来char型值可正可负,则转换后也仍然保持原值, 只是数据的内部表示形式有所不同。 (4) int型与long型 ● long型数据赋给int型 变量 时,将低16位值送给int型变量

Python常用数据类型转换

a 夏天 提交于 2020-01-12 04:13:25
常用的数据类型转换 目标 了解类型转换的作用 掌握常用的类型转换 函数 说明 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字符串 repr(x ) 将对象 x 转换为表达式字符串 eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象 tuple(s ) 将序列 s 转换为一个元组 list(s ) 将序列 s 转换为一个列表 chr(x ) 将一个整数转换为一个字符 unichr(x ) 将一个整数转换为Unicode字符 ord(x ) 将一个字符转换为它的整数值 hex(x ) 将一个整数转换为一个十六进制字符串 oct(x ) 将一个整数转换为一个八进制字符串 来源: https://www.cnblogs.com/yzg-14/p/12181746.html

[你必须知道的.NET]第一回:恩怨情仇:is和as

半世苍凉 提交于 2020-01-12 03:46:52
本文将介绍以下内 容: • 类型转换 • is/as 操作符小议 1. 引言 类型安全是.NET设计之初重点考虑 的内容之一,对于程序设计者来说,完全把握系统数据的类型安全,经常是力不从心的问题。现在,这一切已经在微软大牛们的设计框架中为你解决了。在.NET 中,一切类型都必须集成自 System.Object类型,因此我们可以很容易的获得对象的准确类型,方法是:GetType()方法。那么.NET中的类型转换,应该考虑的地方 有那些呢? 2. 概 念引入 类型转换包括显示 转换和隐式转换,在.NET中类型转换的基本规则如下: 任何类型都可以安全的转换为其基类类型,可以由隐式转换来完成; 任何类型转换为其派生类型时,必须进行显示转换,转换的规则是:(类型名)对象名; 使用GetType可以取得任何对象的精确类型; 基本类型可以使用Covert类实现类型转换; 除了string以外的其他类型都有Parse方法,用于将字符串类型转换为对应的基本类型; 值类型和引用类型的转换机制称为装箱(boxing)和拆箱(unboxing)。 3. 原 理与示例说明 浅谈了类型转换的 几个普遍关注的方面,该将主要精力放在is、as操作符的恩怨情仇上了。类型转换将是个较大的话题,留于适当的时机讨论。 is/as操作符,是C#中用于类型转换的,提供了对类型兼容性的判断,从而使得类型转换控制在安全的范畴

2020.01-Study_update

元气小坏坏 提交于 2020-01-11 04:57:21
2020 1月6日 First_week 1.6-1.12 - Study_update Mon. 递增和递减运算符①,条件运算符 cond?:expr1:expr2② Tue. 位运算符(未搞懂),二进制(了解),模板①,函数模板②,,sizeof运算符③,逗号运算符 Wed. 类型转换(命名的强制类型转换)① Thur. 简单语句,语句作用域,条件语句,if Fri switch①,迭代语句while②, Sat Sun. 1.6 Monday ①除非必须,否则不用递增递减运算符后置版本,因为后置版本需要存储原始值以便于返回这个未修改的内容,这会对性能有一定影响。 ②条件运算符可以嵌套。但是随着嵌套的层数增加,代码可读性急剧下降。 # include "pch.h" # include <iostream> # include <string> using namespace std ; int main ( ) { cout << "请输入成绩" << endl ; int input ; while ( cin >> input && input <= 100 ) { string str ; str = input > 90 ? "优秀" : input > 60 ? "及格" : "不及格" ; //条件运算符嵌套 cout << str ; } } //洋葱骑士

C++强制类型转换

元气小坏坏 提交于 2020-01-10 20:23:16
static_cast 任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。例如: int i = 3, j = 2; double slope = static_cast<double>(i) / j; static_cast还可以用于把void*转换成别的类型的指针: void* p = &slope; double *dp = static_cast<double*>(p); 可以认为static_cast和C中的强制类型转换类似,例如,用C中的强制类型转换是这样的: double slope = ((double)i) / j; static_cast还可以用于处理explicit构造函数。例如: class A { public: explicit A(int n):n(n){} int getN(){return n;} private: int n; }; int getN(A a) { return a.getN(); } 这种情况下,写 getN(12); 是不合法的。可以这么写: getN(static_cast<A>(12)); const_cast 只能用于改变底层const。例如,将常量对象转换成非常量对象(cast away the const)。例如: const char *pc; char *p = const

C++中的显示类型转换

拥有回忆 提交于 2020-01-10 08:49:01
C++中显示转换也成为强制类型转换(cast),有四种:static_cast、dynamic_cast、const_cast、reinterpret_cast。命名的强制类型转换符号一般形式如下: cast_name<type>(expression); 以下分别介绍 一、static_cast 任何具有明确定义的类型转换,只要不包含底层const都可以使用static_cast。好吧这句话我不是很懂,换句话:编译器隐式执行的任何类型转换都可以由static_cast显示完成。也就是说,两类型之间可以发生隐式的转换,就可以用static_cast显示转换,有点意思。但要知道的是C++基本类型的指针之间不含有隐式转换(void*除外、const的有些也是可以的),需要 显示转换 。什么意思?如下: double d=3.14; int i=d; //编译器的隐式转换,等价于下面这条语句 int i=static_cast<int>(d); /*指针之间的转换*/ char str[]="good"; char *ptr=str; int *p=static_cast<int *>(ptr); //编译错误,两者之间的转换要显式,如下 int *p=(int *)(ptr); 仅当类型之间可隐式转换时(除类层次见的下行转换以外),static_cast的转换才是合法的,否则将出错。

javascript类型转换

为君一笑 提交于 2020-01-10 03:37:13
Javascript类型转换: 值 转换为:字符串 数字 布尔值 对象 undefined “undefined” NaN false throws TypeError null “null” 0 false throws TypeError true “true” 1 new Boolean(true) false “false” 0 new Boolean(false) “”空字符串 0 false new String(“”) “1.2”(非空,数字) 1.2 true new String(“1.2”) “one”(非空,非数字) NaN true new String(“one”) 0 “0” false new Number(0) -0 “0” false new Number(-0) NaN “NaN” false new Number(NaN) Infinity “Infinity” true new Number(Infinity) -Infinity “-Infinity” true new Number(-Infinity) 1(无穷大,非零) “1” true new Number(1) {}(任意对象) true [](任意数组) “” 0 true [9](1个数字对象) “9” 9 true [‘a’](其他数组) 使用join()方法 NaN

static_cast、const_cast和reinterpret_cast学习

蓝咒 提交于 2020-01-10 03:35:25
static_cast   任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。例如,通过将一个运算对象强制转换成double类型就能表达式浮点数除法: //进行强制类型转换以便执行浮点数处罚 double slope = static_cast<double>(j)/i;   当需要把一个较大的算术类型赋值给较小的类型时,static_cast非常有用。此时,强制类型转换告诉程序的读者和编译器:我们知道并且不在乎潜在的精度损失。一般来说,如果编译器发现一个较大的算术类型试图赋值给较小的类型,就会给出警告信息;但是当我们执行了显式的类型转换后,警告信息就会被关闭了。   static_cast对于编译器无法自动执行的类型转换也非常有用。例如我们可以使用static_cast找回存在于void*指针中的值: void *p=&d;//正确:任何非常量对象的地址都能存入void* //正确:将void*转换回初始的指针类型 double *dp=static_cast<double*>(p);   当我们把指针存放在void*中,并且使用static_cast将其强制转换回原来的类型时,应该确保指针转换后所得的类型就是指针所指的类型。类型一旦不符,将产生未定义的后果。 const_cast   const_cast只能改变运算对象的底层const

C++中动态联编与静态联编

有些话、适合烂在心里 提交于 2020-01-10 00:20:31
1.函数联编 将代码中的函数调用解释为执行特定的函数代码块,叫做函数联编。 函数联编分为静态联编和动态联编: 静态联编:在编译过程中进行联编,又称早期联编; 动态联编:在程序运行时进行联编,又称晚期联编; 在C++中,动态联编与通过指针和引用调用方法有关,其实可以说,这是由继承控制的。通常,C++不允许将一种类型的地址赋给另一种类型的指针,也不允许一种类型的引用指向另一种类型。 但是,这也有例外,指向基类的引用或指针可以引用派生类对象,而不必进行显式类型转换(将派生类指针或引用转换为基类引用或指针被称为向上强制类型转换);反过来,将基类指针或引用转换为派生类指针或引用被称为向下强制类型转换。注意,如果不使用显式类型转换,则向下强制类型转换是不允许的。 2.结合代码理解 class Animal { //动物基类 private : //...... public : virtual void eat ( ) const { cout << "动物吃方法!!" << endl ; } //...... } ; class Dog : public Animal { //狗类派生于动物类 private : //...... public : void eat ( ) const { cout << "狗吃骨头!!!" << endl ; } //...... } ;

js笔记(强制类型转换)

微笑、不失礼 提交于 2020-01-09 16:42:55
这篇随笔记录一下js中数据的各种类型转换的规则,虽然很基础,但是重新过一遍会发现有些规范还是挺意想不到的 首先介绍一下ToString, ToNumber, ToBoolean 的转换规则 1、ToString    规则1:null 转换为 “null” , undefined 转换为 “undefined” , true 转换为 “true” ;   规则2:普通对象,除非自定义,否则用 toString();       数组的toString()方法,先把所有单元字符串化,然后再用“,”连接;[1,2,3,4] // “1,2,3,4”; 2、ToNumber   规则1:布尔值 true 转换为 1, false 转换为 0; undefined 转换为 NaN; null 转换为 0;字符串处理失败时返回NaN;   规则2:以 0开头地十六进制数会被当成十进制;   规则3:对象会先被处理成相应地基本类型值,再按照值类型做相应处理;        对象做ToPrimitive操作规则:先valueOf(), 如果valueOf的结果不是基本类型,再进行 toString() ;如果均不返回基本类型,则报TypeError;       使用Object.create(null) 创建的对象,无valueOf 跟 toString 方法,故不能被强制类型转换   规则4