gpt4 book ai didi

c - 使用位掩码将有符号整数转换为二进制补码

转载 作者:行者123 更新时间:2023-11-30 19:45:26 25 4
gpt4 key购买 nike

我得到了这段代码,用于将有符号整数转换为二进制补码,但我不明白它是如何工作的,特别是当输入为负数时。

void convertB2T( int32_t num) {

uint8_t bInt[32];
int32_t mask = 0x01;
for (int position = 0; position < NUM_BITS; position++) {
bInt[position] = ( num & Mask) ? 1 : 0;
Mask = Mask << 1;
}
}

所以我的问题是:

  1. num是一个整数,Mask是一个十六进制,那么num和Mask是如何工作的呢? C 是否只是将 num 转换为二进制表示并进行按位与? Mask 的输出也是整数吗?因此,如果此输出非零,则将其视为 TRUE,如果为零,则将其视为 FALSE,对吧?

  2. 如果 num 为负数,这将如何工作?我尝试运行代码,但实际上没有得到正确的答案(所有更高级别的位都是 1)。

最佳答案

该程序基本上提取数字的每一位并将其放入 vector 中。所以每一位都成为一个 vector 元素。它与二进制补码转换无关(尽管生成的位 vector 将采用二进制补码,因为数字的内部表示采用二进制补码)。

  1. 计算机不知道十六进制意味着什么。每个值都以二进制存储,因为二进制是计算机唯一理解的东西。因此,“整数”和十六进制值都转换为二进制(十六进制也是整数)。在计算机使用的这些二进制表示上,应用二元运算符。

  2. 为了理解当 num 为负数时结果会发生什么,您需要了解结果基本上是 num 的二进制补码表示形式,并且需要知道二进制补码表示方式的工作原理。 Wikipedia是一个很好的起点。

关于c - 使用位掩码将有符号整数转换为二进制补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26451916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com