最近在《深入理解计算机系统》上看到一道题,分享一下:

假设我们在对有符号值使用补码运算的32位机器人运行代码。对于有符号值使用的是算术右移,而对于无符号值使用的是逻辑右移。变量的声明和初始化如下:

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

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

unsigned ux = x;

unsigned uy = y;

对于下面每个C表达式,1)证明对于所有的x和y值,它都为真(等于1);或者2)给出使得它为假(等于0)的x和y的值:

(x > 0) || (x-1 < 0)

假。设x等于Tmin32(32位有符号补码的最小值:-2147483648);那么,x-1必定负溢出等于Tmax32(32位有符号补码的最大值,2147483647),此时表达式等于0。

(x & 7) != 7 || (x << 29 < 0)

真。如果表达式(x&7)!=7的值为0,则x低3位为二进制为111。在32位机器上,左移29位时,此时最高位符号位正好为1必定小于0。

(x*x) >= 0

有符号补码乘法是先将补码按照无符号数相乘,再截断后,将无符号数转成补码得到乘积。所以只要乘积截断之后最高位为1就不成立。比如,当x为65535(0xffff)时,x*x为-131071(0xfffe0001)

x<0 || -x <= 0

真。如果x大于等于0,则-x小于等于0。因为32位补码的表示范围为-2147483648~2147483647。每一个正数都有对应的负数。

x > 0|| -x >= 0

假。如果x小于等于0,设x为Tmin32(32位有符号补码的最小值:-2147483648)。Tmin32的负数等于其本身,没有正数与之对应。

x+y == uy + ux

真。补码和无符号加法有相同的位级行为。x,y转为ux,uy只是数值变化,二进制位并无变化。另外,x+y虽然会有正溢出或负溢出,uy+yu也有正溢出,但是他们在二进制位上都是一样的。进行比较之前,会将有符号补码x和y的结果转换成无符号数。所以比较结果为1。

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

真。利用C语言按位取反的特性,~y=-y-1。代入表达式有x*-y-x+uy*ux。又因为x*y等于ux*uy,所以表达式只剩余-x。

c 复杂的前置后置面试题_你被哪些C语言面试题坑过?相关推荐

  1. python剑指offer面试题_剑指Offer(Python语言)面试题38

    面试题38:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如,输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca和cba. # - ...

  2. 【Android RTMP】NV21 图像旋转处理 ( 快速搭建 RTMP 服务器 Shell 脚本 | 创建 RTMP 服务器镜像 | 浏览器观看直播 | 前置 / 后置摄像头图像旋转效果展示 )

    文章目录 安卓直播推流专栏博客总结 一. 编写快速搭建 RTMP 服务器 Shell 脚本 二. RTMP 快速搭建方法 三.创建阿里云 RTMP 服务器镜像 四.浏览器查看直播内容 五.前置 / 后 ...

  3. AOP开发——在不修改源代码的前提下,对类里面的方法进行增强 : 前置 后置 环绕 异常||如何得到目标方法的参数和返回值

    AOP开发 @Transactionl 在不修改源代码的前提下,对类里面的方法进行增强 前置 后置 环绕 异常 创建项目前引入aop的包 <dependency>     <grou ...

  4. 手写Spring-第六章-让我访问!实现前置后置处理扩展功能

    前言 上一次我们实现了bean定义的自动化注册,这让我们的demo看起来已经很有Spring的那个味道了.但是扩展性还是差了一些.我们都知道,要写出高内聚,低耦合,富有扩展性的代码.那么如何增加扩展性 ...

  5. [凯圣王]碳水在身体内的去向/碳水前置后置的区别/碳水循环计划的简聊/训练前什么时间吃碳水

    碳水在身体内的去向/碳水前置后置的区别/碳水循环计划的简聊/训练前什么时间吃碳水 一.视频 二.碳水的种类 三.碳.蛋.脂 转换关系 四.碳水在身体中的储存数量 五.碳水什么时候补充 六.碳水循环饮食 ...

  6. Jmeter性能测试学习(五):Beanshell处理器(包含前置后置)

    BeanShell是一种脚本语言,一种完全符合java语法的java脚本语言,并且又拥有自己的一些语法和方法,beanShell是一种松散类型的脚本语言(这点和JS类似).jmeter中就有这个内嵌的 ...

  7. 【pytest】概述pytest——setup、teardown方法和conftest中的fixture用法,来执行测试用例的前置/后置条件语句操作

    大家好,我是好学的小师弟.今天和大家分享下-在pytest中的前置/后置操作. 所谓的前置/后置操作,就是在测试用例执行前,你预先要执行的一些步骤:在测试用例执行完毕后,你要执行的一些数据清理/备份工 ...

  8. c 复杂的前置后置面试题_采摘后18小时直达货架,利农集团用后置仓“直连”生鲜电商...

    文 | 杨亚飞图片来源| pexels36氪获悉,日前,亚洲知名集约化无土水培果蔬种植企业利农集团完成新一轮数千万美元融资,投资方为海纳亚洲创投基金(SIG).本轮融资所得资金将继续使用于种植基地和产 ...

  9. c 复杂的前置后置面试题_OPPO Reno拆解:优秀工艺由外而内,复杂用料不负旗舰之名...

    OPPO的新系列Reno手机最近吸引了不少注意力,不管是消费者还是手机极客都对其优秀的性能和强大的配置抱有极大的兴趣.最近,知名数码博主爱玩客对Reno十倍变焦版进行了拆解,从内部结构向我们揭示了这部 ...

最新文章

  1. Arabidopsis thaliana 拟南芥 长read SRX533608
  2. 读书狂想之《穷爸爸,富爸爸》财富观
  3. docker php composer 使用_宿主机nginx与docker的PHP搭配使用
  4. 四因素三水平正交试验表_案例 | 螺栓装配失效试验研究
  5. 浅析网站开发的未来前景如何?
  6. 分享超全的 Linux 渗透测试命令速查表
  7. Ubuntu 18.x 环境下mysql创建用户并更改用户权限
  8. JSP页面取当前日期 oracle导入导出 branch与tag
  9. awk按分隔符的不同取出不同的列
  10. [vue] 如何解决vue打包vendor过大的问题?
  11. Python协程--实现斐波那契数列(Fibonacci)的几种方式
  12. SSH连接virtualbox中的虚拟机
  13. simplex字体下载cad_CAD字体大全【资料下载】
  14. android-sdk-windows 如何安装,android-sdk-windows 安装.doc
  15. android studio连接模拟器 mumu模拟器,雷电模拟器,夜神模拟器
  16. html5背景好看颜色渐变css样式,CSS3制作渐变背景
  17. 高清影音发展的产物格式转换器
  18. IDR 关键帧 GOP
  19. 前端学习路线(前端零基础)
  20. 基于安卓的共享单车设计与实现

热门文章

  1. 情绪调节的自适应_如何做好情绪的管理者
  2. MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结
  3. 如何查看OpenCV源码
  4. Java并发编程实战~原子类
  5. Java并发编程实战~volatile
  6. 为什么我们要使用HTTP Strict Transport Security?
  7. 开放-封闭原则(OCP)
  8. python动态验证码_Python 模拟生成动态产生验证码图片的方法
  9. 电子音乐包括电声乐器和计算机音乐,浅谈电子音乐制作的发展方向
  10. linux安装pl sql,Linux上安装配置InstantClient及64位系统Pl/SQL配置