zoukankan      html  css  js  c++  java
  • 深入理解计算机系统 作业1 2.61 2.65 2.73 2.76解答

    2.61


    A !(~x)

    B !x

    C !(~ (x | 0x00ffffff))

    D !(~ (x | 0xffffff00))




    2.65

    分析:因为本题受12次操作的限制,故不能按位计算是否该位为1。考虑到本题只需要判断1的个数的奇偶性,而并不需要计算一共有多少个1。那么我们考虑到如果能去掉偶数个1对结果并不会产生影响,这需要快速的去掉偶数个1。因为异或运算恰好可以把同为1时变成0。然后在利用分治的方法,整体异或来减少操作次数。

    操作:1

    1.16和后16位对齐后异或,那么这时候原来32位的奇偶性和目前异或出来的16位的结果一致。

    2.同理前8位和后8位对齐异或。

    3.同理前4位和后4位对齐异或。

    4.同理前2位和后2位对齐异或。

    5.同理前1位和后1位对齐异或。

    最后只需要判断最后那一位上是1还是0即可。

     

    int even_ones(unsigned x)
    {
    	unsigned  y = x >> 16; x ^= y;
    	y = x >> 8; x ^= y;
    	y = x >> 4; x ^= y;
    	y = x >> 2; x ^= y; 
    	y = x >> 1; x ^= y; 
    
    	return !(x & 1);
    	
    }




    2.73

    【分析】首先判断是否有无溢出,因为不能用判断符号(<>),因此我们可以考虑符号位,如果(x+y)的符号位和xy的符号位都不同,则发生溢出。这个可以用两次异或和一次与操作完成。

    ans= x+y

    ALL= (( x ^ ans) & (y ^ ans)) >> ( intBitCnt - 1);显然当算术溢出时,ALL32个位上的值均为1111.....111),否则ALL= 0Ps:因为是算术右移。


    然后继续判断是正溢出还是负溢出,只需要看x或者y的符号位即可判断。

    x_sign= x >> (intBitCnt – 1); 如果正溢出则x_sign= 0 否则各个数位上的值均为1(111....111)

    对于返回的结果,ans| ALL 之后,如果溢出则结果为全1,否则结果仍为x+y。如果正溢出我们只需要令其减去(1<<(intBitCnt – 1))即可,如果负溢出令其减去(1<<(intBitCnt-1)) ^ 111....111(全部1)即可,则否减去0

    这样只要上面参与运算的1与是否溢出,是否正负溢出有关就可以了。


    ALL& 1 = 1 是溢出的判断条件。

    x_sign& ALL = 111.....111(1)是负溢出的条件,0则可能正溢出,也可能不溢出。


    int saturating_add(int x,int y)
    {
    	int intBitCnt = sizeof(int) << 3;
    	int ans = x + y;
    	int ALL = (( x ^ ans) & (y ^ ans)) >> ( intBitCnt - 1);
    	int x_sign = x >> ( intBitCnt  - 1);
    	return (ans | ALL) - ( (ALL & 1) << ( intBitCnt - 1))^ (x_sign & ALL);
    }




    2.76

    AK = 5 codex<<2+x

    Bk = 9 codex<<3+x

    Ck = 30codex<<5-x<<1

    Dk = -56 codex<<3- x << 6

  • 相关阅读:
    201720181 JaWorld 第三周作业
    201720181 Java小组1623 第一周作业
    201720181 JaWorld 第四、五周作业
    201720181 Java小组1623 第二周作业
    无法打开用户默认数据库的解决方法
    技术网站/博客网址收藏
    .net中防止用户多次登录的方法
    asp.net导出excel方法总结
    面向对象设计模式之Bridge桥接模式(结构型)
    面向对象设计模式之Composite组合模式(结构型)
  • 原文地址:https://www.cnblogs.com/james1207/p/3320159.html
Copyright © 2011-2022 走看看