机器数的表示用c语言,数据的机器级表示与处理(C语言的运算)

高级语言程序中涉及的运算(以C语言为例)

整数算术运算、浮点数算术运算

按位、逻辑、移位、位扩展和位截断

指令集中涉及到的运算

涉及到的定点数运算

算术运算

带符号整数运算:取负 / 符号扩展 / 加 / 减 / 乘 / 除  / 算术移位

无符号整数运算:0扩展 / 加 / 减 / 乘 / 除

逻辑运算

逻辑操作:与 / 或 / 非 / …

移位操作:逻辑左移 / 逻辑右移

涉及到的浮点数运算:加、减、乘、除

基本运算部件ALU的设计

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

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

按位运算

用途

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

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

操作

按位或:“|”

按位与:“&”

按位取反:“~”

按位异或:“^”

问题:如何从16位采样数据y中提取高位字节,并使低字节为0?

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

例如,当y=0x2C0B时,得到结果为:0x2C00

逻辑运算

用途

用于关系表达式的运算

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

操作

“‖”表示“OR”运算

“&&”表示“AND”运算

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

“!”表示“NOT”运算

与按位运算的差别

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

运算过程不同:按位 ~ 整体

结果类型不同:位串 ~ 逻辑值

移位运算

用途

提取部分信息

扩大或缩小数值的2、4、8…倍

操作

左移::x<>k

不区分是逻辑移位还是算术移位,由x的类型确定

无符号数:逻辑左移、逻辑右移

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

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

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

带符号整数:算术左移、算术右移

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

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

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

位扩展和位截断运算

用途

类型转换时可能需要数据扩展或截断

操作

没有专门操作运算符,根据类型转换前后数据长短确定是扩展还是截断

扩展:短转长

无符号数:0扩展,前面补0

带符号整数:符号扩展,前面补符

截断:长转短

强行将高位丢弃,故可能发生“溢出”

例1(扩展操作):在大端机上输出si, usi, i, ui的十进制和十六进制值是什么?

short  si = -32768;

unsigned short  usi = si;

int  i = si;

unsingned  ui = usi ;

总结:C语言程序中的基本数据类型及其基本运算类型

基本数据类型

无符号数、带符号整数、浮点数、位串、字符(串)

基本运算类型

算术、按位、逻辑、移位、扩展和截断、匹配

计算机如何实现高级语言程序中的运算?

将各类表达式编译(转换)为指令序列

计算机直接执行指令来完成运算

例:C语言赋值语句“f = (g+h) – (i+j);”中变量i、j、f、g、h由编译器分别分配给MIPS寄存器$t0~$t4。寄存器$t0~$t7的编号对应8~15,上述程序段对应的MIPS机器代码和汇编表示(#后为注释)如下:

000000 01011 01100 01101 00000 100000   add $t5, $t3, $t4   # g+h

000000 01000 01001 01110 00000 100000  add $t6, $t0, $t1   # i+j

000000 01101 01110 01010 00000 100010  sub $t2, $t5, $t6   # f =(g+h)–(i+j)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值