C整型升级和寻常算术转换
ANSI C中的整型升级
char,short int或者int型位段(bit-field),包括它们的有符号或无符号变型,
以及枚举类型,可以使用在需要int或unsigned int的表达式中,
如果int可以完整地表示源类型的所有值,那么该类型的值就转换为int,否则转换为unsigned int。
ANSI C中的寻常算术转换
当执行算术运算时,操作数的类型如果不同,就会发生转换。
数据类型一般朝着浮点精度更高、长度更长的方向转换,
整型数如果转换为signed不会丢失信息,就转换为signed,否则就转换为unsigned。
这个称为值保留(value preserving)原则,与K&R C所采用的无符号保留(unsigned preserving)原则不同。
浮点类:
如果一个操作数的类型是long double,那么另一个操作数无论是什么类型都将被转换成long double。
如果两个操作数都不是long double型,那么当其中一个操作数的类型是double型,则另一个就将被转换成double 型。
如果两个操作数都不是double型,而其中一个操作数是float型,则另一个被转换成float型。
注意:double和float都不可用unsigned,short修饰,另外float还不可用long修饰
整形类规:
否则,两个操作数都不是三种浮点类型之一,它们一定是某种整值类型。在确定共同的目标提升类型之前,编译器将在所有小于int的整值类型上施加一个被称为整值提升(integral promotion)的过程。在进行整值提升时,类型(char、signed char、unsigned char和short、int)都被提升为类型int。如果机器上的int型足够表示所有unsigned、shoft型的值(这通常发生在short用半个字表示,而int用一个字表示的情况下),则unsigned short int也被转换成int,否则它会被提升为unsigned int。
wchar_t和枚举类型被提升为能够表示其底层类型(underlying type)所有值的最小整数类型。
一旦整值提升执行完毕,类型比较就又一次开始。如果一个操作数是unsigned long型,则第二个也被转换成unsigned long型。如果两个操作数的类型都不是unsigned long,而其中一个操作数是
相关文档:
C是面向过程的程序设计,程序=数据结构+算法 [最原始,但编个程确实不易]
C++是面向对象的程序设计,程序=多个类+消息(类=数据结+算法)[比较容易上手]
C# 是纯面向对象的语言[更加比较容易上手]
VC/VC++/VC# 只是用来开发C/C++/C#应用程序的软件中的一种。
......
1.已知strcpy 函数的原型是:
char *strcpy(char *strDest, const char *strSrc);
其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy
答案:
char *strcpy(char *strDest, const char *strSrc)
{
if ( strDest == NULL || strSrc == NULL)
return NULL ;
if ( strDest ......
调试keil程序时有时会出现各种编译警告,一般情况下不会影响程序的运行。但出现如题WARNING:MULTIPLE CALL TO SEGMENT警告时,请留意您的程序是否会发生错误。上述警告指的是你定义的函数体在主程序中被调用,在中断中也被直接或间接的调用了。可想若主程序正运行此函数时,中断来临也运行这段程序的话会发生函数重载现象。 ......
c与c++ static函数的区别
本文转自:http://blog.csdn.net/lipps/archive/2007/05/18/1615419.aspx
static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准).
(1)局部静态变量
(2)外部静态变 ......
搞软件是有搞头的
——邹祁峰
2009年12月3日
声明:所说的只针对C、C++、.NET专业的同学,对其他专业也许没有参考价值!
[推荐给大三的学弟学妹们]
【欢迎各位朋友补充】
对我个人而言,大学毕业找工作算是画上了一个许多人羡慕,但我自己仍感遗憾的句号。找工作期间 ......