【深入理解计算机系统第3版】有符号数和无符号数转换以及移位运算练习题2.23

题目

考虑下面的C函数:

int fun1(unsigned word)
{return (int) ((word << 24) >> 24);
}int fun2(unsigned word)
{return ((int) word << 24) >> 24;
}

假设一个采用补码运算的机器上以32位程序来执行这些函数。还假设有符号数值的右移是算术右移,而无符号数值的右移是逻辑右移。

wfun1(w)fun2(w)
0x00000076
0x87654321
0x000000c9
0xedcba987

 代码

#include <stdio.h>
#include <string.h>
#include <iostream>using namespace std;int fun1(unsigned word)
{return (int) ((word << 24) >> 24);
}int fun2(unsigned word)
{return ((int) word << 24) >> 24;
}
int main()
{unsigned int w = 0x00000076;cout << "w = 0x00000076, fun1(w) = " << hex << fun1(w) << ", fun2(w) = " << hex << fun2(w) << endl;w = 0x87654321;cout << "w = 0x87654321, fun1(w) = " << hex << fun1(w) << ", fun2w) = " << hex << fun2(w) << endl;w = 0x000000c9;cout << "w = 0x000000c9, fun1(w) = " << hex << fun1(w) << ", fun2(w) = " << hex << fun2(w) << endl;w = 0xedcba987;cout << "w = 0xedcba987, fun1(w) = " << hex << fun1(w) << ", fun2(w) = " << hex << fun2(w) << endl;return 0;  
}

结果 

分析

对于fun1函数来说,(int)((word << 24) >> 24)的执行顺序是

  1. word << 24 word左移24位
  2. (word << 24) >> 24 然后右移24位
  3. (int)((word << 24) >> 24) 最后从无符号数转换成有符号数

对于fun2函数来说,((int) word << 24) >> 24的执行顺序是

  1. (int) word  word 被转换成有符号数
  2. (int) word << 24 然后左移24位
  3. ((int) word << 24) >> 24 最后右移24位

相同位模式的有符号数和无符号数,由于编码定义的不同,表示的整数会有所不同。

fun1: 对于无符号数w来说,经过左移24位和右移24位后,所有的数值都会变成0x000000XX(XX=76,21,c9,87)。由于最左边16进制数为0,二进制表示为0000。这样的位模式表示为有符号数值为正,即和无符号数的位模式一样。

fun2: w转换为有符号数后左移操作和无符号数的左移操作是一样的,即都在位最右端填充24个0。

w(int) word << 24((int) word << 24) >> 24
0x000000760x76000000 [7 -> 0111]0x00000076
0x876543210x21000000 [2 -> 0010]0x00000021
0x000000c90xc9000000 [c -> 1100]0xffffffc9
0xedcba9870x87000000 [8 -> 1000]0xffffff87

由于最左端的位产生了变换, 0xc9000000和0x87000000是负数,所以接下来的右移会是算术右移。而正数的右移依旧是逻辑右移。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码审计-PHP原生开发篇SQL注入数据库监控正则搜索文件定位静态分析

文章目录 前言1、Bluecms-CNVD-1Day-常规注入审计分析2、emlog-CNVD-1Day-常规注入审计分析3、emlog-CNVD-1Day-2次注入审计分析 前言 挖掘技巧&#xff1a; -语句监控-数据库SQL监控排查可利用语句定向分析 -功能追踪-功能点文件SQL执行代码函数调用链追踪 -正则搜索-(update…

QT----opencv4.8.0编译cuda版本,QTcreater使用

目录 1 编译opencv4.8.02 验证能否加载GPU cuda12.1 opencv4.8.0 vs2019 cmake3.29 1 编译opencv4.8.0 打开cmake&#xff0c;选择opencv480路径&#xff0c;build路径随意 点击configure后&#xff0c;选择这些选项&#xff0c;opencv_word&#xff0c;cuda全选&#xff0c;…

工业组态 物联网组态 组态编辑器 web组态 组态插件 编辑器

体验地址&#xff1a;by组态[web组态插件] BY组态是一款非常优秀的纯前端的【web组态插件工具】&#xff0c;可无缝嵌入到vue项目&#xff0c;react项目等&#xff0c;由于是原生js开发&#xff0c;对于前端的集成没有框架的限制。同时由于BY组态只是一个插件&#xff0c;不能独…

【Linux】Ubuntu 文件权限管理

Linux 系统对文件的权限有着严格的控制&#xff0c;用于如果相对某个文件执行某种操作&#xff0c;必须具有对应的权限方可执行成功&#xff0c;这也是Linux有别于Windows的机制&#xff0c;也是基于这个权限机制&#xff0c;Linux可以有效防止病毒自我运行。因为运行的条件是必…

【接口】HTTP(1)|请求|响应

1、概念 Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;用于从万维网&#xff08;就是www&#xff09;服务器传输超文本到本地浏览器的传送协议。 HTTP协议是基于TCP的应用层协议&#xff0c;它不关心数据传输的细节&#xff0c;主要是用来规定客户端和…

详解python中的迭代

如果给定一个list或tuple&#xff0c;我们可以通过for循环来遍历这个list或tuple&#xff0c;这种遍历我们称为迭代&#xff08;Iteration&#xff09;。 在Python中&#xff0c;迭代是通过for ... in来完成的&#xff0c;而很多语言比如C语言&#xff0c;迭代list是通过下标完…

4月4号总结

java学习 一.接口 1.介绍 定义接口需要使用到关键字interface去定义接口。 格式如下&#xff1a; 类与接口的关系不是继承&#xff0c;而是实现&#xff0c;用关键字 implements &#xff0c;格式如下&#xff1a; 这个类去实现接口&#xff0c;其中的关系就相当于&#xf…

基于Socket简单的UDP网络程序 vs 简单的TCP网络程序

⭐小白苦学IT的博客主页 ⭐初学者必看&#xff1a;Linux操作系统入门 ⭐代码仓库&#xff1a;Linux代码仓库 ❤关注我一起讨论和学习Linux系统 1.前言 网络编程前言 网络编程是连接数字世界的桥梁&#xff0c;它让计算机之间能够交流信息&#xff0c;为我们的生活和工作带来便利…

蓝桥杯python组真题练习1

目录 1.单词分析 2.成绩统计 3.门牌制作 4.卡片 5.跑步训练 6.蛇形填数 7.时间显示 1.单词分析 1.单词分析 - 蓝桥云课 (lanqiao.cn) s list(input()) maxx 0 for i in s:num s.count(i)if num>maxx:sm imaxx numif num maxx:if ord(sm)>ord(i):sm i print…

考研经验与科目学习建议

前言 24考研刚刚结束&#xff0c;成功上岸&#xff0c;回想起刚开始的时候的迷茫&#xff0c;加上因为迷茫而被卖书的坑的几百块钱。感慨万千&#xff0c;所以决定写下这篇文章。回想当时&#xff0c;因为笔者零基础&#xff0c;加上作为一名专升本的学生&#xff0c;惶恐因为…

如何锁定鼠标光标在水平、垂直或45度对角线模式下移动 - 鼠标水平垂直移动锁定器简易教程

在我们进行精细工作例如如创建图标和图形设计时&#xff0c;通常需要我们对鼠标移动进行精确控制。一旦向左或向右轻微移动&#xff0c;都可能导致设计出错。若出现不必要的错误&#xff0c;我们极有可能不得不重新开始&#xff0c;这会令人感到非常沮丧。这种情况下&#xff0…

SAP ERP实施有几个阶段?工博科技带来SAP系统实施项目全流程介绍

根据SAP实施方法论&#xff0c;SAP系统实施流程一共分为五个主要项目阶段&#xff1a;项目准备、蓝图设计、系统实现、上线准备、上线后支持。在项目启动前&#xff0c;双方必须对项目实施过程中各阶段所涉及的任务与交付件以及项目完成标志达成共识&#xff0c;各阶段项目交付…

微信小程序 python+django口腔牙科问诊系统 springboot设计与实现_1171u

口腔助手”小程序主要有管理员&#xff0c;医生和用户三个功能模块。以下将对这三个功能的作用进行详细的剖析。 本文通过采用B/S架构&#xff0c;uniapp框架、MySQL数据库&#xff0c;结合国内“口腔助手”管理现状&#xff0c;开发了一个基于微信小程序的“口腔助手”小程序。…

TCP客户端及服务器端开发实践

一、TCP客户端及服务器端开发实践 1、TCP网络应用程序开发分类 ① TCP客户端应用程序开发 ② TCP服务器端应用程序开发 客户端程序是指运行在用户设备上的程序&#xff0c;服务端程序是指运行在服务器设备上的程序&#xff0c;专门为客户端提供数据服务。那如何记忆呢&…

软考--软件设计师(软件工程总结1)

目录 1.定义 2.软件生存周期 3.软件过程&#xff08;即软件开发中遵循的一系列可预测的步骤&#xff09; ​编辑4.软件开发模型 5.需求分析&#xff08;软件需求分析&#xff0c;系统需求分析或需求分析工程&#xff09; 6. 需求工程 7.系统设计 8.系统测试 1.定义 软件…

【开发环境】Mac 安装 Visual Studio Code ( VSCode 简介 | 下载 VSCode | 安装 VSCode | 安装中文语言包 )

文章目录 一、Visual Studio Code 简介二、MAC 安装 Visual Studio Code1、下载 Visual Studio Code2、安装 Visual Studio Code3、安装中文语言包4、编辑 html 并运行 一、Visual Studio Code 简介 Visual Studio Code 简称 VSCode , 是 微软 开发的一款 轻量级 / 跨平台 的代…

腾讯云服务器4核8g配置好不好?用它干啥使?

腾讯云4核8G服务器多少钱&#xff1f;腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月&#xff0c;活动页面 txybk.com/go/txy 活动链接打开如下图所示&#xff1a; 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器&#xff0c;详细配置为&#xff1a;轻量4核…

【Pt】马灯贴图绘制过程 05-铁丝与渲染出图

目录 效果 步骤 一、基本材质 二、浮尘 三、渲染 效果 步骤 一、基本材质 CtrlAlt鼠标右键选中指定的纹理集 在智能材质中将“Iron Forged Old”加入图层 将智能材质“Iron Forged Old”文件夹打开&#xff0c;将图层“Base”和“Edge”的基本颜色改暗一点 二、浮尘 新…

746.Leetcode 使用最小花费爬楼梯

746.Leetcode 使用最小花费爬楼梯 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯…

BUUCTF-MD5

BUUCTF-MD5 1 注意&#xff1a;得到的 flag 请包上 flag{} 提交 27120bd8-e273-4528-97a9-28dcebe236de.zip flag{admin1} e00cf25ad42683b3df678c61f42c6bdahttps://www.cmd5.com/