第三章数据、运算与基本输入输出(编辑修改稿)内容摘要:

(0000 0111 amp。 0000 0001 = 0001) 15 (0000 0111 166。 0000 1010 = 1111) 11 (0000 1010 166。 0000 0001 = 1011) 13 (0000 0111 ^ 0000 1010 = 1101) –8 ( ~ 0000 0111 ) = 1111 1000 –7 28 (0000 0111 2 = 0001 1100) 2 (0000 1010 2 = 0000 0010) 1 (0000 0111 2 = 0000 0001) 167。 34 运算符 位 运算 共 73 页 第 33 页  说明 关于 :右移一位 = 缩小 1/2 关于 :左移一位 = 扩大 2 倍 关于 ~: 因为: ~ x = 按位求反 = 求反运算 求负 = 求补 = 求反 + 1 所以: 求反 = 求负 – 1 ~ x = x 1 ~7 = –8 ~(–8) = 7  注意: 对二进制 的 位 进行运算 对 int型、 char型和 long型进行 位 运算 167。 34 运算符 位 运算 共 73 页 第 34 页 167。 34 运算符 自增自减 运算 五、自增自减运算符  运算符 ( 单 目 ← ) ++ 自增 14 – – 自减 14  ++和 – –为单目运算,只能作用于变量  只能对 int、 char、 long和 指针变量 进行运算  功能: ++x == x=x+1 – –x == x=x–1 (前缀 ) x++ == x=x+1 x– – == x=x–1 (后缀 ) 共 73 页 第 35 页 167。 34 运算符 自增自减 运算  自增 (自减 )有 前缀 和 后缀 之分。 前缀 形式 : 先 自增 (自减 )再 引用 后缀 形式 : 先 引用 再 自增 (自减 )  前缀与后缀的区别: y=++x。 == x=x+1。 y=x。 x先 加 1再 赋值 y=x++。 == y=x。 x=x+1。 x先 赋值 再 加 1 共 73 页 第 36 页 167。 34 运算符 自增自减 运算实例  实例 (1) ++i。 i++。 因为在表达式中没有其它运算,结果一样。 (2) x=1。 y=++x。 结果 : x=2,y=2 y=++x。 == x=x+1。 y=x。 在做 赋值运算之 前, x先加 1,然后将 x赋给 y (3) x=1。 y=x++。 结果 : x=2,y=1 y=x++。 == y=x。 x=x+1。 先将 x 赋值给 y ,然后 x 再加 1 共 73 页 第 37 页 x=3, z=3 x=3, y=6, z=3*6=18 x=3, y=6, z=2*6=12 x=3, y=6, z=3*5=15 x=3, y=6, z=2*5=10 x=4, z=4*4=16  注意,以下操作是错误的: x = ++(i+j)+1。 j = ++ (5+x)。 y = ++x * ++x。 167。 34 运算符 自增自减 运算实例  实例 已知: int x = 2, y = 5, z。 z = ++x。 z = ++x * ++y。 z = x++ * ++y。 z = ++x * y++。 z = x++ * y++。 z = ++x * ++x。 逻辑上 虽然正确 ,但在实际编程中容易产生误解,应当避免 共 73 页 第 38 页 167。 34 运算符 自增自减 运算实例  实例 已知: int i=1, j=2, k。 k=i+++j。 C语言处理运算符(标识符)时,遵循 自左向右 的原则,两个‘ +’号是一个运算符,故处理成:( i++)+j。 k = i+++++j。 不能编译通过。 原因是编译器将 前两个‘ +’处理成自增,接下来又将两个‘ +’号处理为自增,故不符合语法。 编程者可用空格或括号来表示正确的含义: k=i++ + ++j。 注意:一般不要用这样的语句。 共 73 页 第 39 页 167。 34 运算符 赋值与赋值组合 运算 六、赋值与赋值组合运算符  运算符 (双目 ← ) 赋值运算: = 2 赋值组合运算: e1 op= e2 2 等于于: e1 = e1 op (e2) 其中: op为下列 10个运算符之一 + – * / % | amp。 ∧ e1为可以进行赋制操作的变量 e2为合法的表达式  例: x += 2。 == x = x + 2。 x *= y+1。 == x = x * ( y+1)。 不等价 x = x * y+1。 x = 2。 == x = x 2。 共 73 页 第 40 页 167。 34 运算符 条件 运算 七、条件运算符  运算符 ( 三 目 ← ) e1 ? e2 : e3  功能:如果表达式 e1成立 ( e1值为非 0),则执行 表达式 e2; 否则 ( 表达式 e1不成立), 执行 表达式 e3 例: max = (ab) ? a : b。 求变量 a与 b的 最大值 min = (ab) ? a : b。 求变量 a与 b的 最小值 判断 e1 ? 执行 e2 执行 e3 成立 不成立 共 73 页 第 41 页 167。 34 运算符 指针 运算 八、指针运算符  运算符 ( 单 目 ← ) amp。 取变量的地址 14 * 取指针变量(所指向)的内容 14  注意 : 运算符 amp。 和“ 位与 ”运算是同一符号; 运算符 * 和“ 乘 ”运算是同一符号。 只能从程序的上下文来区分运算符 amp。 和 运算符 * 的实际意义。 共 73 页 第 42 页 167。 34 运算符 指针 运算实例  实例: 已知: int x=2, y, *px。 x为一般变量, px为指针型变量 y=x * 100。 *px=y*10。 ++x。 x++。 px px = amp。 x。 取变量 x的地址赋值给指针 px 又称为让 px指向 变量 x x=10。 若 px已经 指向 x, 则可以用 *px 代替变量 x x 2 10 == *px = 10。 也称为 间接访问 == y = *px。 取指针 px的 内容 == y = *px * 100。 == x = y * 10。 == ++ * px == (* px)++; 括号 不能 省略 y=x。 共 73 页 第 43 页 167。 34 运算符 其它 运算 九、其它运算符  运算符 . 取结构 /联合的成员 15 – 通过指针 取结构 /联合的成员 15 ( ) 改变表达式中的优先级关系 15 [ ] 数组下标 15 , 逗号,表达式从左向右顺序计算 1 (type) e 将 e的数据类型强制转换为 type 14 sizeof (opr) 求 opr所占用的内存的字节数 14 结构 数组 共 73 页 第 44 页 167。 34 运算符 其它 运算实例  实例 : 已知: int x,y,z。 y = ( x=10, x+1)。 答案 : 先执行 x=10,然后再执行 y = x+1 y=11, x=10 z = sizeof(int)。 答案 : z=2 求 int型数据占用的内存字节数量 z = sizeof(x)。 答案 : z=2 求变量 x占用的内存字节数量 共 73 页 第 45 页 167。 35 运算符的优先级与结合性  按运算符的 优先级 分为 15级  按运算符的 结合性 分为 2种 自左向右 结合 自右向左 结合  优先级 不同 时:运算符优先级的 高低 决定了进行运算的 先后次序。  优先级 相同 时:同优先级运算符的运算次序由结合性决定。  例如: 四则运算中的“先乘除,后加减”反映了运算符的优先级;“同级运算从左至右”反映了乘 /除运算(加 /减运算)的结合性。 共 73 页 第 46 页 167。 35 运算符的优先级与结合性 优先级 运算符 结合性 优先级 运算符 结合性 ( ) [ ] 9 = = ! = → 15 . → 8 amp。 ! ~。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。