位与整数运算.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
位与整数运算

位与整数运算 实验报告 P缪佶朗 2012-5-26 实验目的: 用指定的运算符在规定的运算步数内通过函数得到位与整数运算结果。 问题与算法思想的描述:1 1. 或非运算 只用, ~ 实现或非运算。 由摩根定律 ~(x|y)=(~x)(~y), 故用如下函数实现按位或非 int bitNor(int x, int y) { return (~x)(~y); } 2. 异或运算 逻辑代数给出x^y= ((~x)y)|(a(~y)) ,变换为要求的只含~,形式如下: x^y= ((~x)y)|(a(~y)) =~~ ((~x)y)|(x(~y)) =~ ( ~( (~x)y) )(~( x(~y)) ) ) 故bitXor 函数写为 int bitXor(int x, int y) { int x1=(~x)y; int x2=x(~y); int xx=(~x1)(~x2); return ~xx; } 3. 不等判断 由于^ 实现的是按位运算,不能直接返回x^y, 只要x!=y ,必有一位异或为1 , 为得到结果1 ,对其两次逻辑取反!作用后为0 ,再取一次逻辑非得真,即1。 而x==y 时,x^y 为全0 ,两次逻辑反对其不起效果。 故isNotEqual 函数写为 int isNotEqual(int x, int y) { return !!(x^y); } 4.取出32 位数4 字节中的任意一个 将32 位数由低到高分为4 组,取第i 组可通过右移8 *i 位后与 0xff 与运 算实现。 1本部分介绍最终确定的正确或最优算法。算法的修改过程见调试分析部分。 3 x Byte3 Byte2 Byte1 Byte0 取第0位 0000 0000 0000 1111 return 0000 0000 0000 Byte0 x 0000 0000 Byte3 Byte2 Byte1 Byte0 取第2位 0000 0000 0000 1111 int getByte(int x, int n) { return (x(n3))0xff; } 返回 5.用最低位覆盖所有位 利用调试函数getByte(int x, int n) 过程中发现的右移时自动以首位数覆盖的 规律(调试分析部分),可将末位移至首位后再右移至末位。即返回 (x31)31 。 6.逻辑右移 与前所述以首位数覆盖的右移相对,逻辑右移实现空位补0 。欲逻辑右移n 位,只需将直接右移的结果与上前n 位为0 ,后32 -n 位为1 的常数。此常数易 知不能由1 右移得到,其按位反的结果却可由0xffffffff 左移得到。 用./dlc bits.c 检查规则:由于禁用-运算,故32 -n 用32+(~n+1) 实现; 由于 只允许使用0x00~0xff 之间的常数,0xffffffff 由0右移得到,0 由0左移得到。 int logicalShift(int x, int n) { int n2=32+(~n+1); int y=~(((0x131)31)(n2)); return (xn)y; } 返回 7.计数二进制数中的1 二进制数x 中的1 数目即为该数中各位数相加的和。通过移位操作,将各位 上1 累加到计数器中。取出原数中1 并保留进位需要选择合适的常数。 Step1 :

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档