zoukankan      html  css  js  c++  java
  • 深入计算机系统 练习题2.44 补码运算

    int x = foo(); //任意值

    int y = bar(); //任意值

    unsigned ux =x;

    unsigned uy = y;

     

    证明对于所有的x和y值,它都为真(等于1);

    或者2)给出使得它为假(等于0)的x和y的值。

    1)x+y == uy+ux

    答:这个等式成立,首先这个比较是在位级运算层面的比较。补码和无符号加法有相同的位级行为,也就是从位级层面来看,它们是完全相同的。

     

     

    2)x*~y + uy*ux == -x

    很显然,这也是位级层面的比较。既然已知x+y == uy+ux,不妨把整个等式统一成补码的角度来看。即x*~y + y*x == -x;然后~y=-y-1,这样等式就成立了。

    举个例子 y=5, 假设w=4,即位长为4位,则y的二进制补码表示为0101;

    -y=-5,其补码表示为1011;

    -y-1,其补码表示为1010;

    ~y 是按位取反运算 表示为 1010;

    可以发现~y=-y-1;

     

  • 相关阅读:
    Slf4j框架的用法
    常用框架介绍
    Spring整合Kafka(Spring-Kafka)
    Java并发容器
    kafka多线程消费
    kafka简介
    kafka-clients介绍
    windows搭建kafka
    rocketmq-client使用
    Window搭建部署RocketMQ
  • 原文地址:https://www.cnblogs.com/grooovvve/p/10325897.html
Copyright © 2011-2022 走看看