c语言中16位和8位算术运算,C语言中的各类运算.pdf

C语言中的各类运算

开场白

上一讲谈到,在高级语言程序的表达式中的各类运算,会被

编译器转换为相应的运算指令,程序运行时,CPU执行这些

指令,控制操作数在运算电路中被处理。

C

本讲主要介绍 语言程序中涉及的运算,包括算术运算、按

位运算、逻辑运算、移位运算等。

C语言程序中涉及的运算

•算术运算(最基本的运算)

–无符号数、带符号整数、浮点数的+、-、*、/ 、%运算等

•按位运算

–用途

• 对位串实现“掩码”(mask)操作或相应的其他处理

(主要用于对多媒体数据或状态/控制信息进行处理)

–操作

• 按位或:“|”

• 按位与:“&”

• 按位取反:“~”

• 按位异或:“^”

如何从数据y中提取低位字节,并使高字节为0?

可用“&”实现“掩码”操作:y & 0x00FF

例如,当y=0x0B2C时,得到结果为:0x002C

C语言程序中涉及的运算

•移位运算 例:某字长为8的机器中,x、y和z都是8位带符

–用途 号整数,已知x=-81,则y=x/2=?z=2*x=?

-81=-1010001B,故x的机器数

• 提取部分信息

y=x/2 → x>>1

• 扩大或缩小2、4、8…倍

z=2*x → x<<1

–操作 y=-41?有效数 z=94 溢出

• 左移::x<>k 据丢失

• 从运算符无法区分逻辑移位还是算术移位,由x的类型确定

• 若x为无符号数:逻辑左(右)移

高(低)位移出,低(高)位补0,可能溢出!

问题:何时可能发生溢出?如何判断溢出?

若高位移出的是1,则左移时发生溢出

• 若x为带符号整数:算术左移、算术右移

左移:高位移出,低位补0。可能溢出!

溢出判断:若移出的位不等于新的符号位,则溢出。

右移:低位移出,高位补符 ,可能发生有效数据丢失。

C语言程序中涉及的运算举例

移位运算和按位运算举例

对于一个n (n≥8)位的变量x ,请根据C语言中按位运算的定义,

写出满足下列要求的C语言表达式。

(1)x的最高有效字节不变,其余各位全变为0。

(2)x的最低有效字节不变,其余各位全变为0。

(3)x的最低有效字节全变为0,其余各位取反。

(4)x的最低有效字节全变1,其余各位不变。

参考答案:

(1)(x>>(n-8))<

(2)x & 0xFF

(3)((x^ ~0xFF) >>8 )<< 8

(3)x | 0xFF

C语言程序中涉及的运算

•逻辑运算

–用途

• 用于关系表达式的运算

例如,if (x>y and i<100)then ……中的“and”运算

–操作

• “‖”表示“OR”运算

• “&&”表示“AND”运算

例如, if ((x>y) && (i<100)) then ……

• “!”表示“NOT”运算

–与按位运算的差别

• 符号表示不同:& ~ && ;| ~ ‖; ……

• 运

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值