- 1
- 0
- 约2.06万字
- 约 175页
- 2021-11-17 发布于四川
- 举报
将一个double型数据赋给float变量时,截取前面7位有效数字,存放到float变量的存储单元中,但应注意数值取值范围不以溢出。 字符型数据赋给整型变量时,由于字符只占有1个字节,而整型变量占2个字节,因此将字符数据(8位)放到整型变量低8位中,整型变量高8位有两种情况: ①若是将unsigned char数据赋给整型变量, 高8位补0。 ②若是将char数据赋给整型变量,如果字符最高位为0(0~127),则整型变量高8位补0;如果字符最高位为1(-128~-1),则整型变量高8 位补1。 将一个int、short、long型数据赋给一个char型变量时,只将其8位原封不动地送到char型变量(即截断)。 将int型数据赋给long型变量时,要进行符号扩展,将整型数据的16位送到long型低16位中,如果int型数据为正值(符号位为0),则long型变量的高16位补0;如果int型变量为负值(符号位为1),则long型变量的高16位补1,以保持数值不变。 将unsigned int型数据赋给long型变量时,不存在符号扩展问题,只需将高位补0。 将一个unsigned 类型数据赋给一个占字节数相同的signed 变量(如:unsigned int=int, unsigned long=long, unsigned short=short, unsigned char=char),将unsigned型数据的 内存中各位原样送到signed型变量中,若unsigned 类型数据未超过要赋值的变量的范围,则signed型变量值与unsigned型数据值相同;若超过,要根据补码知识进行转换。如: main() {unsigned int a=65535; int b;b=a; printf(“%d”,b);} 结果输出-1 将signed型数据赋给所占字节相同的unsigned型变量,同样将signed型数据所占内存的各位原样送到unsigned型变量内存中,若signed型数据为非负值,则unsigned型变量值与signed型数据值相同;若为负值,要根据补码知识进行转换。如: main() {unsigned a; int b=-1;a=b; printf(“%u”,a);} 结果输出65535。 2.4.6 条件运算符和条件表达式 1.条件运算符 条件运算符要求有3个操作对象,它是C语言中唯一的三目运算符。 条件运算符的优先级规则: 其他运算符优先于条件运算符,条件运算符优先于赋值运算符和逗号运算符; 条件运算符的结合性是自右向左。 2.条件表达式 用条件运算符构成的表达式称为条件表达式,其一般形式为: 表达式1?表达式2:表达式3 条件表达式的执行顺序是:先计算表达式1的值,若值为非0(真),则计算表达式2的值,并将表达式2的值作为整个条件表达式的结果;若表达式1的值为0(假),则计算表达式3的值,并将表达式3的值作为整个条件表达式的结果。 例2.14 main() {int a=1,b=2,c=3,d=4,e; e=ab?a:cd?c:d; printf(“%d\n”,e);} 条件运算符的结合方向为“自右向左”。所以条件表达式ab?a:cd?c:d相当于ab?a:(cd?c:d)。 2.4.7 逗号运算符和逗号表达式 C语言中提供了一种特殊的运算符——逗号运算符。它用来将两个表达式连接起来组成一个表达式,如3+5,6+8 称为逗号表达式。其一般形式为: 表达式1,表达式2 其求解过程是:先求解表达式1,再求解表达式2,并将表达式2的值作为整个逗号表达式的值。如上面的逗号表达式“3+5,6+8”的值为14,又如 a=3*5,a*4 由表2.2可知:赋值运算符的优先级别高于逗号运算符,因此应先求解a=3*5这个赋值表达式,计算得这个赋值表达式值为15,再求解a*4这个表达式,得60,整个逗号表达式的值为60。 一个逗号表达式又可以与另一个表达式组成一个新的表达式,所以逗号表达式的一般形式可扩展为: 表达式1,表达式2,表达式3……表达式n 顺序求解这n个表达式,整个表达式值为表达式n的值。 请注意并不是任何地方出现的逗号都是作为逗号运算符,例如 变量说明:int a,b,c; 函数参数:printf(“%d,%d,%d”,a,b,c);其中的“a,b,c”并不是一个逗号表达式,它是printf函数的3个参数。 2.4.8 位运算符和位运算 1.“按位与”运算符() 参与运算的两个数,按二进位进行“与”运算。如果两个相应的二进位都为1,则该位
原创力文档

文档评论(0)