迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C语言 >

在 C 语言中符号扩展 9 位

作者:迹忆客 最近更新:2023/05/09 浏览次数:

在本篇文章中,我们将学习如何在 C 语言中对 9 位整数进行符号扩展。首先,我们必须知道符号扩展到底是什么。


什么是符号扩展

符号扩展是指扩展一个数字,同时保持其符号位,例如,从 32 位变为 64 位。在当今使用的数字形式中,符号位始终是最高的。

这只是一个传统问题,但据我们所知,情况总是如此。这表明我们需要将最关键数字的部分移动到新的最高位置,同时保持数字其他部分的完整性。


用 C 符号扩展 9 位整数

C 编程语言中的一些位运算符在硬件级别上运行。但是,要使用这些运算符,必​​须了解内存的架构以及 C 如何将数据保存在内存中。

结构:

  1. 对于 char 类型的每个字符,内存被划分为 1 个字节。
  2. int 类型的内存结构由 4 个字节组成。
  3. short 类型的内存位置由 2 个字节组成。

关于标志的信息可以在最左边的部分找到。数字 1 表示负数,而数字 0 表示正数。

让我们看一下以下示例,以更好地理解所讨论的内容。

首先,在 main() 类中,我们将创建一个 short 类型的变量并将其命名为 val。然后,我们将以与下面相同的方式分配变量。

short val = 234;

之后,我们将把我们制作的 short 值与一个 9 位数字一起提供给名为 res 的变量。

int res= val & 0b0000000111111111;

应用 if 检查。这将检查符号位,即你保持 (0x100) 的最高位是否已设置,如果是,则将其后的所有位置于其后。

if(val & 0x100){
 res=res | 0xFE00;
}

解释:

我们创建了一个 val 变量,一个在内存中具有 16 位的小整数。然后使用& 运算符来屏蔽最近的 9 位。

它是按位运算中使用的 AND 运算符,其过程如下所述。

X   Y   res
0   0   0
0   1   0
1   0   0
1   1   1
  1. res 代表结果,XY 代表许多输入选项。计算是一点一点进行的。

    如果具有相同有效值的两个位都是 1,它只会产生 1。

  2. 因此,我们可以将值的最后 9 位按位 AND 运算符分开,其余位将设置为 0。值 0b0000000111111111 对应于二进制表示。

    这表明只有最近的 9 位包含 1,而其余的包含 0。res 变量将使用结果更新。

  3. 之后,我们使用 if 检查来验证第一位。如果它是 1,我们将它添加到结果中。否则,我们将其保留为 0。

为此,我们再次使用按位 AND 运算符,这次我们只提取第一位,如果答案为 1,则使用|运算符,它是按位 OR 运算符,工作方式如下。

X   Y   res
0   0   0
0   1   1
1   0   1
1   1   1
  1. res 是输出,XY 是输入可能性。是一点一点计算出来的。

    如果两个相同的有效位都是 0,它只输出 0。在 if 语句中,评估此运算符的结果。

    如果 true,按位 OR 运算符用于在结果的最左边插入 1。

  2. 0xFE00 是二进制数的十六进制表示,如果存在符号位,则用于设置其上方的位。

通过利用 C 语言中的位运算符,我们可以执行各种其他操作。C 语言中的按位运算符比按位 AND 和按位 OR 多得多。

有按位 XOR 表示为^符号。 ~ 符号表示按位 NOT 运算符。

>> 符号表示左移运算符。你可以使用 << 符号进行右移。

在这些操作员的帮助下,你可以通过多种方式完成这项工作或任何其他所需的工作。

完整的源代码:

#include <stdio.h>

int main() {

short val = 234;
int res= val & 0b0000000111111111;
if(val & 0x100){
 res=res | 0xFE00;
}
   return 0;
}

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C 语言中使用 typedef enum

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。

C 语言中的静态变量

发布时间:2023/05/07 浏览次数:151 分类:C语言

本文介绍了如何在 C 语言中使用静态变量。在 C 语言中使用 static 变量在函数调用之间保存变量值

C 语言中生成随机数

发布时间:2023/05/07 浏览次数:64 分类:C语言

本文演示了如何在 C 语言中生成随机数。使用 rand 和 srand 函数在 C 语言中生成随机数

C 语言中的 i++ 与++i

发布时间:2023/05/07 浏览次数:83 分类:C语言

本文演示了如何在 C 语言中使用前缀增量与后缀增量运算符。C 语言中++i 和 i++ 记号的主要区别

C 语言中获取当前工作目录

发布时间:2023/05/07 浏览次数:182 分类:C语言

本文演示了如何在 C 语言中获取当前工作目录。使用 getcwd 函数获取当前工作目录的方法

C 语言中的位掩码

发布时间:2023/05/07 浏览次数:126 分类:C语言

本文介绍了如何在 C 语言中使用位掩码。使用 struct 关键字在 C 语言中定义位掩码数据

C 语言中的排序函数

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文演示了如何在 C 语言中使用标准库排序函数。使用 qsort 函数对 C 语言中的整数数组进行排序

C 语言中的 extern 关键字

发布时间:2023/05/07 浏览次数:114 分类:C语言

本文介绍了如何在 C 语言中使用 extern 关键字。C 语言中使用 extern 关键字来声明一个在其他文件中定义的变量

C 语言中的 #ifndef

发布时间:2023/05/07 浏览次数:186 分类:C语言

本文介绍了如何在 C 语言中使用 ifndef。在 C 语言中使用 ifndef 保护头文件不被多次包含 C 语言中的头文件用于定义同名源文件中实现的函数的接口。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便