




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、P1第2章 数据类型、运算符和表达式2.1 数据类型2.2 常量和变量2.3 运算符和表达式2.4 位运算2.5 运算符的优先级2.6 格式化输入输出函数的进一步讨论2.7 常见问题分析P22.1 数据类型在C+语言中,数据类型可分为 :C/C+没有字符串类型,用字符数组表示字符串2P32.2 常量和变量2.2.1 常量(准确的称作文字量/字面量)1.整型文字量:即整常数65535;0177777(65535) 10;0XFFFF=(65535) 10; 整型文字量的后缀(L/、H/h):长整型数加后缀“L”或“l” 。如:12345678902.浮点型文字量 :也称为实型3.14 、 .0、
2、0.、1.23e-4、.234e+12 十进制格式八进制格式 十六进制格式后缀的作用P43. 字符型文字量:用单引号括起来的一个字符 。如:a 、C、 =、 +、 ?字符文字量的值:ASCII码值(对应一个整数)。 转义字符: 以反斜线.开头的特殊表示方式。如:a,n,x30用途:可以表示所有符号,如: 101和x41表示字母A ,n表示回车操作。 4. 字符串文字量:由一对双引号括起的字符序列。如:“C+”串的特点:每个串文字量均在最后隐藏了0(字符串结束的标志)(称作: NULL符,空字符,vs. 空格字符)A = = 65字母A的多种表示方法字母A的多种表示方法字母A的多种表示方法2P5
3、常用的转义字符如下表所示: 转义字符转义字符的意义ASCII代码 n回车换行 10 t横向跳到下一制表位置 9 b退格 8 r回车 13 f走纸换页 12 反斜线符() 92 单引号符() 39 “ 双引号符(“) 34 a鸣铃 7 0空字符(=NULL) ddd13位八进制数所代表的字符 xhh12位十六进制数所代表的字符b含义不同于b。注意: ,0常用注意: ,0常用P65. 符号常量 (宏):用途:含义清楚;能做到“一改全改”。 符号常量在使用之前必须先定义,其一般形式为: #define 符号常量标识符 值如:#define PI 3.14/C 的常量形式,无类型C+的常量:const
4、 double PI 3.14; /C+,有类型预处理命令#define宏替换不是语句,无分号“;”C+ const量2P7例2.2 采用宏定义的方式定义符号常量#include #define PI 3.14159 /定义符号常量PI,值为3.14159void main( ) double radius = 10.0; double perimeter; double area; perimeter = 2 * PI * radius; /使用符号常量 area = PI * radius *radius; /使用符号常量 printf(radius=%lf,perimeter=%lf,a
5、rea=%6.2lfn, radius,perimeter,area);输出结果为:radius=10.000000,perimeter=62.831800,area=314.16%.0f10const double PI=3.14159; /C+中用有类型的const常量替代C的宏2P82.2.2 变量在程序执行过程中,值可以改变的量称为变量。变量要先定义再使用变量定义格式为: 存储类型 数据类型 变量名列表 = 初值; 例:auto int a,b,c; float f, g=3.0;另外,一些约定俗成的规则:尽量见名知意。用户最好不要用下划线来作为变量名的开头。 符号常量(宏)用大写字母
6、,变量标识符可大小写结合。变量定义的目的:通知编译器在哪一块内存区分配多少字节内存单元给变量变量要先定义再使用变量名的大小写敏感case-sensitiveauto自动存储类型2P91整型变量 在C+语言中,整型用int表示。根据整型数在存储器中占用的字节数,又可细分:short unsigned shortintunsigned longunsigned long 占内存字节数满足: unsigned short =unsigned int= unsigned long short = int = long 2.浮点型变量 float 单精度型4字节 double 双精度型8字节 long
7、double 长双精度型10字节3. 字符变量char unsigned char 字符变量就是一个字节的整型变量,二者兼容char ch=a ;可写成char ch=97;int i=97;可写成int i=a;2字节:BC34字节:VC6P102.3 运算符和表达式2.3.1 表达式2.3.2 算术运算符与算术表达式2.3.3 关系运算符与关系表达式2.3.4 逻辑运算符与逻辑表达式2.3.5 自增和自减运算 2.3.6 赋值运算符与赋值表达式2.3.7 条件运算符与条件表达式2.3.8 逗号运算符与逗号表达式P11“运算符”就是记述各种不同运算过程的符号。按运算对象的数目: 单目、双目和
8、三目运算符;按照其功能: 算术、赋值、关系、逻辑、位运算符、+/- 条件运算、逗号等运算符2.3.1 表达式表达式是由运算符和运算量所组成运算量可以是变量、常量、有返回值的函数调用等。变量常量有返回值的函数调用P122.3.2 算术运算符与算术表达式C+语言中,算术运算符有5个,它们的具体含义见下表 :运算符使用形式含义 +单目或双目运算符单目运算表示正号,双目运算表示加法运算 -单目或双目运算符单目运算表示求负,双目运算表示减法运算 *双目运算符乘法运算 /双目运算符除法运算 %双目运算符取模运算(求余数)P13关于算术运算符的使用有以下规则:+、-、*、/运算符的运算量可为任何整型、字符型
9、或浮点型的量 在x/y中,运算量y的取值不能为0。(3) %运算符要求运算量必须是整型,且%后面的运算量不能为0。例如:3 % 5 结果为3-17 % 5 结果为-220 % 10 结果为0P14(4) 当双目运算符的两个运算量的类型相同时,它们的运算结果的类型与运算量类型相同。例如:17.5 + 2.5 结果为浮点型20.016 / 7 结果为整型2,小数部分被省去,称为整除(5) 两个运算量的类型不同时,运算前遵循类型的一般转换规则将运算量自动转换成相同的类型,运算结果的类型与转换后的运算量的类型相同【例】: 15.5 + 5 操作数15.5的类型为实型,运算前将整型数5转换成实型数5.0
10、,然后进行运算,结果为20.5【例】:16 / 5.0 结果为浮点型3.2 ,此为精确除2P15【说明】:在数学中恒等的表达式,在C+语言表达式中不一定恒等,如: 6/4*56*5/ 4。建议:在“/”运算符两边采用float、double数据(精确除) 下面的表达式隐含了危险,因为被0除: 18/(3/6) 18/((double)3/6) 或者:“/”两边的整数有一个在数尾加小数点,如:18/(3./6)为了减少计算误差,常把乘法运算放在除法运算前面完成P16 在C+语言中,字符型、整型和浮点型数据可以在同一表达式中混合使用,C+语言编译系统通过类型转换实现类型统一。自动类型转换应用的三种
11、场合:当双目运算符的两个运算量的类型不相同且进行算术运算时;(2) 当一个值赋予一个不同类型的变量时;(3) 函数调用,实参与形参类型不同时。在本节中仅介绍前两种转换,函数调用转换将在本书的后面部分介绍。 2P171.算术运算时的自动类型转换 它的基本规则可描述为:双目运算符的两个运算量中,值域较窄的类型向值域较宽的类型转换。“值域”就是类型所能表示的值的最大范围。算术转换遵循的转换方向如下图所示:2P18下面两点为必然转换:表达式中的有符号和无符号字符以及短整型一律被转换为整型int类型(2) 当算术运算中出现float类型时,首先将float转成double类型。double ss = f
12、 * n + k / 2; float f = 3.6;int n = 6;long k = 21;doubleintdoubledoubledoublelonglongdouble*、/、%优先级相同+、-优先级相同前者优先于后者3P192. 赋值运算时的自动类型转换赋值运算格式: 左值变量 = 右值表达式赋值转换将右值表达式结果的类型转成左值表达式的数据类型,再将转换后的结果写入左值变量的内存空间中;它不受算术转换规则的约束,转换结果的类型完全由左值变量的类型决定。例如:int i,j;float m;i = (m * j);类型转换过程为:赋值运算符右侧的表达式的值类型为double,经
13、过赋值转换变成int类型。其值也跟着改变以适应新类型。注意:表达式的值与其类型匹配,故值受限于类型;右值表达式类型转换后,其结果也跟着变换。2P203 . 强制类型转换(显式) 强制类型转换是用强制类型转换运算符来实现数据类型转换的,因此强制类型转换也叫做显式转换 。 强制类型转换表达式形式为: (新类型) (表达式A)作用是将表达式A的值参与运算得到运算值,运算值类型为新类型。整体也是表达式,类型为新类型,值为转换后的值2P21例如:float m,n(int)m 取出m的值参与(int)运算,得到中间结果值,该值的类型为int类型。注意:变量m本身类型和值都不变(int)m+n 表达式的结
14、果为double类型 需要注意的是,无论是自动类型转换还是强制类型转换,都只是看作运算符而已。参与运算的变量或常量的类型和值都不改变,改变的就是运算后的中间结果。 2P22 C语言中的关系运算符包括: (小于) =(大于或等于) (大于) != (不等于) 2.3.3 关系运算符与关系表达式关系表达式格式: 运算量 关系运算符 运算量运算量可以是任意表达式关系成立:值为整数1关系不成立:值为整数0P23 优先级 、 = = 、 ! = 关系运算符与算术运算符和赋值运算符比较优先级算术运算符关系运算符高低高低关系运算符的结合性左结合性 【例】 a=3,b=2,c=1;求:a b c 的值 第一步
15、:32关系成立,结果为1;第二步:11关系不成立,结果为0。同优先级时考虑结合性2P24C语言中的逻辑运算符包括: &(逻辑与) | (逻辑或) ! (逻辑非)其中,逻辑与和逻辑或是双目运算符,逻辑非是单目运算符。逻辑运算符及运算量按一定规则所构成的表达式称为逻辑表达式。 2.3.4 逻辑运算符与逻辑表达式P25C+的语法将参与逻辑运算的两个运算分量解释为逻辑量,但通常逻辑运算符两边的运算分量可以是普通表达式。因此,就需先将这些表达式的结果数值转换为逻辑值“真”或“假”,再来进行逻辑运算。 逻辑运算分量对应的表达式转换为逻辑量的规则:若运算分量的值为非0的任意数,则为逻辑“真”;若运算分量的值
16、为0,则为逻辑“假”;逻辑运算的结果为整数值0或1: 逻辑“真”结果用1表示 逻辑“假”结果用0表示P26逻辑运算符的运算规则见下表 : 表达式X表达式Y !X !Y X&Y X|Y非0非0 0 0 11非00 0 1 01 0 非0 1 0 0100 1 1 00P27高低算术运算符关系运算符赋值运算符&|! + - -逻辑运算符的结合性:!右结合性&、|左结合性逻辑运算符与其它运算符比较优先级:优先级和结合性 ! & |高 低P28例2.6 逻辑运算符&的使用#include int main( ) int a , b , c , max; a = 10; b = 20; max = b;
17、 c = ( a b ) & ( max = a ) ; printf(a = %d , b = %d , c = %d , max = %dn,a,b,c,max); return 0; 运行结果为:a = 10 , b = 20 , c = 0 , max = 20 换成“=”,结果如何?a = 10 , b = 20 , c = 1 , max = 10=2P29 在数学中经常有右边的表达式:1=x=1 & x=9直接写成1=x=9,结果如何?对C/C+来说是符合语法的,因为它是一个关系表达式,按左结合求解1=x,若x取值满足条件则表达式结果为1,然后19时前面的关系表达式结果也为 “真
18、”。显然,这种书写方式不能起到对应的条件限制作用。2P30例: 判断某个字符型变量c 的值是否数字字符,正确的写法:if (c=0 & c=9) 若写成:if ( 0=c= 0 & c= 9 0和0的区别整数和字符的区别P31【经典示例】 d !=0 & n /d 0 (假设初始值:d=0)由于d !=0 关系不成立,逻辑量为“假”,因为逻辑“与”运算等效于乘法,即只要两个运算分量中有一个为逻辑“假” ,则整个逻辑“与”运算就为“假”。 故而,本例中n/d -(a+)2.3.5 自增和自减运算P33前置运算:先变后用;用新值参与计算例如:x = 0 ; y = - x + x; 结果为x=-1
19、,y=-2 (2) 后置运算:先用后变;用旧值参与计算例如:x = 0 ; y = x- + x;结果为x = -1 , y =0;(3) 自增自减运算符只能作用于变量,不能用于常量和表达式以及函数调用。 p()P34void main ( ) int a , b , c ; a = b = c =1 ; printf (“ (1) %d n ” , +a | | + b &+c ) ; printf (“ (2) %d t %d t %d n ” , a , b , c ) ; printf (“ (3) %d n ” , +a & + b | |+c ) ; printf (“ (4) %
20、d t %d t %d n ” , a , b , c ) ; printf (“ (5) %d n ” , a | | b | | c ) ; printf (“ (6) %d t %d t %d n ” , a , b , c ) ; printf (“ (7) %d n ” , a & b & c ) ; printf (“ (8) %d t %d t %d n ” , a , b , c ) ; printf (“ (9) %d n ” , a | | b & c ) ; printf (“ (10) %d t %d t %d n ” , a , b , c ) ;结果输出:1211(
21、)()()1321122101100000误区:优先级高的运算符先运算4P351. 基本赋值运算“” 左值 = 右值表达式赋值表达式的值 等于表达式左值变量的值int i,jchar m,nfloat x,ydouble d2.3.6 赋值运算符与赋值表达式i = m nm n的结果为整型,无需转换,直接将值赋给ii = j = 10 (考虑结合性-右结合)相当于i=(j=10),先将10赋给j,而括号中的赋值表达式(j=10)的值就是赋值后的 j 的值,再将其赋给i(考虑类型转换)(考虑优先级)d = m2P362. 复合赋值运算在赋值运算符“=”前加上其他运算符,便构成了复合赋值运算符。C
22、语言中的复合赋值运算符共有10种:+=、-=、*=、/=、%=、&=、|=、=、=复合赋值表达式的形式为:左值op = 右值表达式等价于:左值=左值op右值表达式例如:i += j 等价于 i = i + jx *= y - 5 等价于 x = x * (y-5)m = 2 等价于 m = m b ) ? a : b) ; 将a , b中最大的数赋值给变量 maxmin = ( a b) ? a :(c d) ? c :d(a b) ? a :(c d)? c :d)若:a =1 , b = 2 , c = 3 , d = 4 ,则表达式值 = 4。条件表达式值的类型抉择:xy?1:1.5,若
23、xy关系成立,则表达式结果?【规则】:表达式2和表达式3可以不同类型,此时条件表达式的值的类型为二者中较高的类型,上述表达式结果类型为 double类型2结果为1. 0P41附:在C+中有下面一条语法规则:在一个条件运算符的表达式中,如果后面两个表达式的值类型相同,而且均可以作为左值,则该条件运算符的值是一个左值表达式。如: int x=5;long a , b;(x? a: b) =1;/ 注:若x为真,则a变量的值将被赋值为1(x? x: b) =2;/ x和 b 不是相同类型,条件运算符将作自动转换,经过转换类型的表达式不能再作为左值。(x? a: 6.6) =3;/ 6.6不是左值第一
24、表达式可以为非左值的表达式,如:(x= =0?a:b) = 8;3P42逗号运算符构成逗号表达式,结构为: 表达式1 , 表达式2 , 表达式3, , 表达式n 运算过程为:先求表达式1的值,然后再求表达式2的值,依次计算下去,最后表达式n的值也就是该逗号表达式的值。例如:int b,a=10;/分隔符 b = a+ , a % 3 /逗号运算符 (顺序计算运算符) 先求表达式1的值,结果为10,同时对a计算后缀+ ,此时a的值为11;然后求表达式2(a%3)的值,由于在计算表达式2之前,变量a的自增运算已经完成,因而表达式2的值为2。这样整个逗号表达式的值为2。2.3.8 逗号运算符与逗号表
25、达式2P43sizeof运算符1、格式:sizeof (类型名)2、含义:求某种数据类型的变量存储空间的长度(以字节为单位)。该运算符是在编译时执行,而不是在程序执行时进行运算。3、应用 类型名可以是C+语言的基本数据类型或者构造数据类型(如:数组、指针、结构、class类型等),如: sizeof ( struct student )int array7; sizeof(int 7) sizeof ( array ) sizeof ( int ); sizeof ( int * )sizeof(类型名)sizeof(变量名)P442.4 位运算2.4.1 按位与运算符“&”2.4.2 按位或
26、运算符“|”2.4.3 按位异或运算符“” 2.4.4 二进制左移运算符“”2.4.6 按位取反运算符“”P452.4.1 按位与运算符“&”按位与运算是对两个操作数逐位求与,当它们都为1时,结果为1,否则为0。与运算符的定义如下表所示: 位1 位2 位1&位2 0 0 0 0 1 0 1 0 0 1 1 1例如:int a=0 x0096,b=0 x0080,则a&b的结果为0 x0080P46运算过程为:P472.4.2 按位或运算符“|”按位或运算是对两个操作数逐位相或。当它们都是0的时候,结果为0,否则为1。下表为位逻辑或操作的“真值表” 位1 位2 位1|位2 0 0 0 0 1 1
27、 1 0 1 1 1 1P48运算过程为:例如:int a=0 x0036,b=0 x0055,则a | b的结果为0 x0077P492.4.3 按位异或运算符“”按位异或运算是将两个操作数逐位相异或,当它们相异则结果为1,否则为0。下表为 位逻辑异或操作的“真值表” 位1 位2 位1位2 0 0 0 0 1 1 1 0 1 1 1 0P50运算过程为:从所得的结果看,某位要保持不变就和0异或,某位要取反就和1异或。 举例关于两个整型变量互相交换值3P512.4.4 二进制左移运算符“”二进制左移运算符把数据向左移动若干位,移出左边界的所有位都将丢失,右侧移入0。例如:int a = 4 ,
28、 a ”二进制右移运算符把数据向右移动若干位,移出右边界的所有位都将丢失,左侧的新位的补充遵循下面的规则:【例】变量a是无符号数,a=8,其二进制表示为00001000,右移1位且左侧新位补0后结果为00000100,所以a1的结果为4.由例子可知,向右移动一位相当于整除以一个21。 a4的结果为0(1) 对于无符号数,右移时左侧的新位一律补0,称为“逻辑右移”(2) 对于有符号数,若符号位是0,则左侧新位一律补0;若符号位是1,则左侧新位一律补1,称为“算术右移” 又叫“符号位扩展”3P53【例】变量a是有符号数,a=1,其二进制表示为:111111111右移1位且左侧新位补1后结果为111
29、111111,所以a1的结果为1. ?a2的结果仍为1 (unsigned)a1的结果为2147483647(vc6)或32767(BC3)?P542.4.6 按位取反运算符“”按位取反运算符是将操作数进行逐位“取反”。例如:变量int a=0 x006a,二进制表示为00000000 01101010,按位取反后为11111111 10010101,所以a的结果为0 xff95。 注意运算量的位数!P552.5 运算符的优先级和结合性小结一、优先级当某个运算分量的两边均有运算符时,此时该运算分量将参与哪边运算符的运算就要考虑运算符的优先级,如: b+c * d中的c将和d一起参与乘法运算,然
30、后中间结果与b一起参与加法运算。下面给出一些解释,它有助于掌握C 的运算符优先原则:P563、基本运算符优先级最高,在任何情况下“()”最优先。1、所有运算符归纳为8层:基本运算符单目运算符 算术运算符关系运算符逻辑运算符 条件运算符赋值运算符逗号运算符;2、位运算符优先级容易混淆,通常使用括号。除了移位运算符外,其它位运算符与逻辑运算符相邻,但比逻辑运算符优先级高,又比关系运算符低。4、单目运算符比二目、三目运算符优先级高。5、算术运算符优先级比关系运算符高。6、关系运算符优先级比逻辑运算符高。移位运算符位逻辑运算符位反运算符3P577、条件运算符优先级高于赋值运算符。8、赋值运算符优先级低
31、于除逗号运算符以外的所有运算符。9、逗号运算符优先级最低。基本运算符:( ) . 单目运算符:! + - - + (类型) * & sizeof( )算术运算符: * / % + 移位运算符:关系运算符: = = !=位运算符 :& |逻辑运算符:& | |条件运算符:?:赋值运算符:= += = *= /= %= = &= = |=逗号运算符,高低P58二、结合性 当运算分量两边的运算符是同优先级时,这时就要考虑处于同优先级的两个运算符的结合性了,即运算分量将同哪一边的运算符结合。 C 语言中同优先级的运算符结合性不外乎两种:左结合性、右结合性。绝大部分运算符是左结合性,只有赋值运算符、条件
32、运算符和单目运算符为右结合性。如:x=y=0; z += -x+ +y ;z += (-(x+) +y) ;+怎么解释P592.6 格式化输入输出函数的进一步讨论格式字符说明d以带符号的十进制形式输出整数(正数不输出符号)o以八进制无符号形式输出整数x,X以十六进制无符号形式输出整数,用x则输出十六进制数的a-f时以小写形式输出.用X时,则以大写字母输出u以无符号十进制形式输出整数c以字符形式输出,只输出一个字符s输出字符串f以小数形式输出单双精度数,隐含输出6位小数e,E以指数形式输出实数,如用E,则输出时,指数以大写E表示(如1.2E+02)2.6.1.格式化输出函数printf()回顾P
33、60在格式说明中,在%和上述格式字符间可以插入以下几种附加符号(又称修饰符)见下表: 字符 说明 字母(h)m.nm(代表一个正整数)n(代表一个正整数) -3用于长(短)整型整数,可加在格式符d,o,x,u前面L()用于实型数据,float型(%f)double型(f) long double(%Lf) 最小输出宽度(输出显示区域至少有m字符位,不足时常用空格补充)对实型数据,表示输出小数点后n位;对字符串,表示只显示前面n个字符输出的数字或字符在域内向左靠;无-时,在域内向右靠P61(1).整数 %d, %md适用于int型printf(%3d,%3d,x,y);若x=12,y=12345
34、,则输出结果为 12,12345 %d, %md适用于long型long int x=256790;printf(“%d”,x);/正确如将上面printf函数中的“%d”改为“%8d”,则输出为: 256790printf(“%d”,x);/错误%uunsigned long%huunsigned short%hdshort%uunsigned int%xint(16进制表示)2P62(2) 字符串s格式符,用来输出一个字符串。有几种用法: %s,例如:printf(%s,CHINA);输出“CHINA”字符串(屏幕显示时没有双引号)。 %ms,%-ms,若串长小于m,则%ms在m列范围内,
35、字符串向左靠,右补空格,%-ms左补空格。 %m.ns, %-m.ns,输出字符串中左端n个字符【例】printf(%3s,%7.2s,%.4s,%- 5.3sn, HUST,HUST,HUST,HUST);输出:HUST, HU,HUST,HUS P63(3) 浮点数 %f,要求输出小数点后6位小数,不足6位常用0填充,等价于%.6f。 %m.nf,m含义同前面,要求显示n位小数。 %-m.nf,与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。 并非全部数字都是有效数字P64例 输出实数时指定小数位数。#include void main( ) float x=357.987;
36、printf(%f ,%10f,%10.2f, %.2f %-10.2fn, x , x , x , x , x );输出结果如下:357.987000,357.987000, 357.99,357.99 , 357.99 2P65 scanf格式字符表: 格式字符 说明 d要求输入有符号的十进制整数没有u o要求输入无符号的八进制整数 x, X要求输入无符号的十六进制整数(大小写作用相同) c要求输入单个字符 s要求输入字符串,在输入时以空白字符开始,以一个空白字符结束。 f要求输入实数,可以用小数形式或指数形式输入2P66 scanf的附加格式说明字符表: 字符 说明 l用于输入长整型数据
37、(可用%ld,%lo,%lx)以及double型数据(可用lf)longdouble(%Lf) h用于输入短整型数据(可用%hd,%ho,%hx) 域宽m(无.n)指定输入数据所占宽度(列数),域宽应为正整数 *表示本输入项在读入后不赋给相应变量2 %c格式输入时需要注意清除键盘缓冲区中剩下没用的数据,比如回车符如:scanf(“%d”,&i); scanf(“%c”,&ch);输入8回车A回车,ch得不到字母A的ascii码值改:scanf(“%d”,&i); fflush(stdin);/清空键盘 scanf(“%c”,%ch);P672.7 常见问题分析1. 数据的溢出问题数据有其固定的
38、表示范围,因此当数据的值超出了其范围时,将出现溢出问题。例2.9 整型数溢出 (BC+3.0)#include int main( ) int a,b; a=0 x7fff;/VC6平台则取0 x7fffffff b = a + 1; printf(%d,%dn,a,b); return 0;在上面这段程序中,变量a的值为32767,它在内存中的表示为:a:0111 1111 1111 1111当a加上1后,内存中的表示为:1000 0000 0000 0000它的实际十进制值为 -32768,与我们希望的32768的值不符,这就是因为溢出问题而产生的错误,在程序编写过程中需要注意避免。2P6
39、82. 无符号整数与有符号整数的混合运算问题例2.10 无符号整型数与有符号整型数混合运算出错#include void main( ) int x = 1; unsigned int y = 2; printf(x - y = %d , (x - y)/2 = %d n,x - y , (x - y)/2);输出结果为:x y = -1 , (x - y)/2 = 32767按照常理,我们认为(1 - 2)/2结果应该为-0.5,截去小数后,结果应为 -1,但事实上并非如此,而是得到结果32767。分析如下:P69变量x,y的值分别为1和2,它在内存中的表示为:x: 0000 0000 0000 0001y
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 货物运输合同(水路)
- 医疗行业人才引进合同
- 房地产开发商与购房者合同大全
- 劳动用工安全责任合同模板:应对与处理
- 地区授权代理合同书
- 基础设施建设项目土地征用合同
- 房地产 -链家地产 二手房业务知识与经验介绍
- 安全责任的落实强化企业安全主体责任考核试卷
- 摄影器材行业知识产权保护与合规经营策略研究考核试卷
- 数据结构与算法基础考核试卷
- 2025年黑龙江能源职业学院单招职业倾向性测试题库完整
- 学校垃圾处理运输服务合同
- 广西2025年01月南宁市良庆区公开考试招考专职化城市社区工作者笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 注塑产品生产流程
- 统编版(2025)七年级下册道德与法治教学计划
- 七年级数学下册 第11章 单元测试卷(苏科版 2025年春)
- 2024年天津市建筑安全员A证考试题库及答案
- 2021年江苏省公务员考试行测+申论真题及答案解析(A类卷)
- 2024年皖西卫生职业学院单招职业适应性测试题库及答案解析
- 《病理学》课程标准
- 统编版一年级下册语文全册完整课件
评论
0/150
提交评论