csapp datalab

news2024/9/23 3:19:58

知识点总结

1. 逻辑运算符关系

and(与)、or(或)和xor(异或)是逻辑运算符,用于对布尔值进行操作。它们可以在不同的逻辑表达式之间进行转换。下面是and、or和xor之间的转换规则:

  • and转换为or: a and b = !(a or b) (取反)
  • or转换为and: a or b = !(a and b) (取反)
  • xor转换为and和or: a xor b = (a and !b) or (!a and b)

2. 补码

二进制补码(Two’s complement)是一种表示有符号整数的方法。它是计算机中常用的表示负数的方式。
在二进制补码表示中,最高位(最左边的位)被用作符号位,0表示正数,1表示负数。其余位表示数值的绝对值。
二进制补码的转换规则如下

  • 对于正数,其二进制补码就是其二进制表示本身。
  • 对于负数,首先需要将其绝对值转换为二进制表示,然后对其进行按位取反操作(即将0变为1,将1变为0),最后再加1。例如,对于十进制数-5,其二进制补码的转换步骤如下:将5转换为二进制表示:5 = 00000101,对二进制表示按位取反:11111010,将取反后的结果加1:11111011,所以,-5的二进制补码为11111011。
    在这里插入图片描述
    使用二进制补码表示有符号整数,可以方便地进行加法和减法运算,而无需特殊处理符号位。此外,二进制补码的表示范围也比使用其他方法表示负数更广泛。

补码范围:
补码是一种表示有符号整数的方法,它使用最高位作为符号位,0表示正数,1表示负数。补码的范围取决于使用的位数。
对于n位二进制补码表示,最小的补码整数是将最高位设置为1,其余位设置为0,最大的补码整数是将所有位都设置为1。
以8位二进制补码为例,最小的补码整数是:
10000000
这个二进制数的十进制表示是-128。
最大的补码整数是:
01111111
这个二进制数的十进制表示是127。
因此,8位二进制补码表示的范围是-128到127。
对于n位二进制补码,范围可以表示为-2 ^ (n-1) 到 2 ^ (n-1)-1。

3. int 获取负数

int类型的二进制表达式是用二进制数字表示一个整数。在C语言中,int类型通常是有符号的,因此它使用补码表示法来表示负数。

对于有符号的int类型,它占用固定的位数(通常是32位),其中最高位(最左边的一位)是符号位,用来表示正负。如果符号位为0,则表示该整数是正数;如果符号位为1,则表示该整数是负数。

以下是一个示例,展示了一个有符号32位int类型的二进制表达式:

00000000 00000000 00000000 00000000   // 0
00000000 00000000 00000000 00000001   // 1
00000000 00000000 00000000 00000010   // 2
...
01111111 11111111 11111111 11111110   // 2147483646
01111111 11111111 11111111 11111111   // 2147483647 (INT_MAX)
10000000 00000000 00000000 00000000   // -2147483648 (INT_MIN)
10000000 00000000 00000000 00000001   // -2147483647
10000000 00000000 00000000 00000010   // -2147483646
...
11111111 11111111 11111111 11111110   // -2
11111111 11111111 11111111 11111111   // -1

需要注意的是,整数的二进制表达式是从右向左排列的,最右边的一位是最低位,最左边的一位是最高位。每个二进制位表示一个权值,从右向左依次为1、2、4、8、16、32、64、128、256、…,以此类推。

对于无符号的int类型(即unsigned int),它也占用固定的位数(通常是32位),但没有符号位,因此可以表示更大的正整数。

以上是一个简单的示例,展示了int类型的二进制表达式。实际上,具体的二进制表达式可能会因编译器和平台的不同而有所不同。如果需要精确地了解某个特定编译器和平台上int类型的二进制表达式,可以使用位运算或相关的工具来查看。

简单来说就是 x 的负数就是 ~x+1

4. 判断字符是否是digit

在这里插入图片描述

5. 正数和负数的左移和右移

在C语言中,对于正数的左移操作和右移操作,补充的是零。
正数左移:

unsigned int x = 5;       // 二进制表示为 00000101
unsigned int result = x << 2;  // 左移2位,移动后的结果为 00010100,等于20

正数右移:

unsigned int x = 20;       // 二进制表示为 00010100
unsigned int result = x >> 2;  // 右移2位,移动后的结果为 00000101,等于5

负数右移:

int x = -20;       // 二进制表示为 11101100
int result = x >> 2;  // 右移2位, 移动后的结果为 11111011,等于-5

对于负数的左移操作,结果是未定义的。这是因为左移操作可能导致符号位发生改变,而C语言并没有明确规定负数左移的补充规则。因此,负数的左移操作是不可靠的,应该避免使用。

6. 负数使用逻辑非

这是因为非零的值在逻辑上被视为真,而逻辑非运算符将其取反得到假的结果。

int x = -10;
int result = !x;

// result 的值为 0

7. 逻辑取反运算符有两种形式:~ 和 !。

逻辑取反运算符有两种形式:~!

  1. ~ 运算符是按位取反运算符,用于对一个整数的二进制表示进行按位取反操作。它将每个二进制位的值进行翻转,即0变为1,1变为0。~ 运算符只适用于整数类型。

  2. ! 运算符是逻辑取反运算符,用于对一个表达式的逻辑值进行取反操作。如果表达式的值为真(非零),则 ! 运算符将其取反为假(0),如果表达式的值为假(0),则 ! 运算符将其取反为真(非零)。! 运算符适用于任何标量类型,包括整数、浮点数和指针类型。

以下是两种运算符的示例:

int x = 10;
int y = 0;
int result1 = ~x;  // result1 的值为 -11
int result2 = !y;  // result2 的值为 1

在上面的示例中,~x 对整数 x 进行按位取反操作,结果为 -11。而 !y 对整数 y 进行逻辑取反操作,因为 y 的值为0,所以结果为1。

8. 溢出问题

例如: int的范围是
01111111 11111111 11111111 11111111 // 2147483647 (INT_MAX)
10000000 00000000 00000000 00000000 // -2147483648 (INT_MIN) == 2 ^ 31
-2 ^ 31 - ( -2 ^ 31) 会出现溢出问题

问题合集

1. makefile

在这里插入图片描述
删除m32:
使用gcc -m32编译的可执行文件无法在64位操作系统上运行。这是因为gcc -m32选项会将代码编译为32位的目标平台,生成的可执行文件只能在32位操作系统上运行。

在64位操作系统上运行32位可执行文件需要在系统上安装相应的32位库和运行环境。如果你尝试在64位操作系统上运行32位可执行文件,可能会遇到错误,例如缺少所需的库或不兼容的系统调用。

在这里插入图片描述

在这里插入图片描述

如果你希望在64位操作系统上运行代码,你应该使用默认的gcc命令来编译代码,而不是使用gcc -m32选项。这样将生成适用于64位目标平台的可执行文件。

2. c文件不是cpp文件

打印函数使用# include <stdio.h>

参考答案和解析

https://zhuanlan.zhihu.com/p/106109635

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

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

相关文章

答题小程序源码个人每日答题怎么做

答题小程序源码之个人每日答题怎么做 该模式以个人学习答题的方式进行答题&#xff0c;每人每天有X次答题机会&#xff0c;答对一题得X分&#xff0c;连续答对有额外奖励积分&#xff0c;每道题有倒计时X秒的思考时间。答题完成后领取本次的奖励积分。答题过程中如发现题目或答…

美图自研视觉大模型3.0发布

美图公司在举办的15周年生日会上发布了自研AI视觉大模型Miracle Vision3.0版本。面世100天后&#xff0c;美图AI视觉大模型MiracleVision3.0将全面应用于美图旗下影像与设计产品&#xff0c;并将助力电商、广告、游戏、动漫、影视五大行业。 美图公司创始人、董事长兼首席执行官…

3.后来居上的栈

概述 目标&#xff1a; 栈存储结构与特点基于数组实现栈基于单链表实现栈刷题(有效的括号) 存储结构与特点 栈(Stack)并非指某种特定的数据结构&#xff0c;它是有着相同典型特征的一数据结构的统称&#xff0c;因为栈可以用数组实现&#xff0c;也可以用链表实现&#xff…

超详细的万字Git分支教程(保姆级别)

&#x1f497;推荐阅读文章&#x1f497; &#x1f338;JavaSE系列&#x1f338;&#x1f449;1️⃣《JavaSE系列教程》&#x1f33a;MySQL系列&#x1f33a;&#x1f449;2️⃣《MySQL系列教程》&#x1f340;JavaWeb系列&#x1f340;&#x1f449;3️⃣《JavaWeb系列教程》…

stable-diffusion的模型简介和下载使用

前言 我们下载完stable-diffusion-ui后还需要下载需要的大模型&#xff0c;才能进行AI绘画的操作。秋叶的stable-diffusion-ui整合包内&#xff0c;包含了anything-v5-PrtRE.safetensors和Stable Diffusion-V1.5-final-prune_v1.0.ckpt两个模型。 anything-v5-PrtRE.safetenso…

PowerShell系列(十三):PowerShell Cmdlet高级参数介绍(三)

目录 1、WarningAction参数 2、WarningVariable 出现警告后的变量 3、Whatif 假设参数 4、Confirm参数 今天给大家讲解PowerShell Cmdlet高级参数第三部分相关的知识&#xff0c;希望对大家学习PowerShell能有所帮助&#xff01; 1、WarningAction参数 通过单词含义&…

IG-Net:一种用于地铁客流预测的交互图网络模型

文章信息 论文题目为《IG-Net: An Interaction Graph Network Model for Metro Passenger Flow Forecasting》的一篇2023年4月发表在IEEE TRANSACTIONS ON INTELLIGENT TRANSPORTATION SYSTEMS的地铁客流预测交互图网络模型。 摘要 城市轨道交通系统很大程度上满足了市民的出行…

C++标准模板(STL)- 类型支持 (复合类型类别,is_scalar,is_object)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实例…

后门分析及示例

代码分析&#xff0c;关键字定位 传一个asp文件 输入账户错误会提示&#xff1a;非法登录&#xff1b; 逆向工程抓取这个关键字定位 查找代码里面的关键字&#xff0c;定位到关键字后把代码复制出来&#xff0c; 修改exec执行函数为msgbox消息弹出用gb2312方式保存成VBS文件.…

Leetcode刷题详解——不同路径 II

1. 题目链接&#xff1a;63. 不同路径 II 2. 题目描述&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finis…

企业链表(未完成)

文章目录 1. 插入2. 代码实现 1. 插入 // 插入 void insert(LinkList* list, int pos, LinkNode* data) {if (!list || !data)return;if (pos < 0 || pos > list->size)return;LinkNode* curNode &(list->head);for (int i 0; i < pos; i) {curNode curN…

jenkins工具系列 —— 删除Jenkins JOB后清理workspace

文章目录 问题现象分析解决思路脚本实现问题现象分析 Jenkins使用过程中,占用空间最大的两个位置: 1 、workspace: 工作空间,可以随便删除,删除后再次构建时间可能会比较长,因为要重新获取一些资源。 2 、job: 存放的是项目的配置、构建结果、日志等。不建议手动删除,…

任正非说:浑水摸鱼,只有强者才能摸到鱼。

嗨&#xff0c;你好&#xff01;这是华研荟【任正非说】系列的第24篇文章&#xff0c;让我们聆听任正非先生的真知灼见&#xff0c;学习华为的管理思想和管理理念。 一、只强调精细化管理&#xff0c;公司是会萎缩的&#xff0c;精细化管理的目的&#xff0c;是为了扩张不陷入混…

最新版上门服务小程序源码 同城技师上门服务系统源码

最新版上门服务小程序源码 同城技师上门服务系统源码 需要了解的请看文末 系统介绍&#xff1a; 1、数据概况&#xff08;新增业务城市用户投票功能&#xff0c;更加直观的查看业务城市的关注度、人气和影响力,促进业务开展&#xff09; 2、数据概况 &#xff08;增加可视化…

【Linux命令】Linux常见命令介绍(最强超详细版本)

Linux常见命令 1. Linux 常用命令1.1 用户配置 2.目录及文件操作3. 文件查看及处理命令3. 其他命令 1. Linux 常用命令 1.1 用户配置 Linux 下有两种用户&#xff1a;超级用户&#xff08; root&#xff09; &#xff09; 、普通用户。 a) 超级用户&#xff1a;可以再 linux …

Linux开发者的利器:深入了解环境开发工具之yum篇

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; &#x1f354;前言&#xff1a;在博主的博客中&#xff0c;Linux系统我们已经将关键指令、权限等等全部了解完了。接下来我们应该学习什么呢&#xff1f;当我们拿起一个手机或电脑&#xff0c;我们最先想到的就是下载QQ、…

什么是Webpack?它的主要功能是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

内网渗透-域信息收集

域环境 虚拟机应用&#xff1a;vmware17 域控主机&#xff1a;win2008 2r 域成员主机&#xff1a;win2008 2r win7 一.域用户和本地用户区别 使用本地用户安装程序时&#xff0c;可以直接安装 使用域用户安装程序时&#xff0c;需要输入域控管理员的账号密码才能安装。总结…

【Proteus仿真】【STM32单片机】便携式恒温箱设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用报警模块、LCD1602显示模块、DS18B20温度模块、加热制冷模块、按键模块、HC05蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1…

最新Ai智能创作系统源码V3.0,AI绘画系统/支持GPT联网提问/支持Prompt应用+搭建部署教程

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…