gpt4 book ai didi

c - 在无符号 32 位整数中查找位位置

转载 作者:太空狗 更新时间:2023-10-29 16:58:15 24 4
gpt4 key购买 nike

我想当他们谈论位位置时我可能在我的 CS 课上睡着了,所以我希望有人能伸出援手。

我有一个无符号的 32 位整数(让我们使用值:28)

根据我正在查看的一些文档,整数的值包含指定各种内容的标志。

标志中的位位置从 1(低位)到 32(高位)编号。所有未定义的标志位都是保留的,必须设置为 0。

我有一个表格,其中显示了标志的含义,其中包含数字 1-10 的含义。

我希望有人可以尝试向我解释这一切意味着什么,以及如何根据位位置从 28 等数字中找到“标志”值。

谢谢

最佳答案

28转为二进制11100。这意味着第 1 位和第 2 位未设置,第 3、4 和 5 位已设置。

几点:首先,真正习惯 C 的人通常会从 0 开始编号,而不是 1。其次,您可以使用按位与运算符 (&) 测试各个标志,如:

#define flag1 1    //  1 = 00 0001
#define flag2 2 // 2 = 00 0010
#define flag3 4 // 4 = 00 0100
#define flag4 8 // 8 = 00 1000
#define flag5 16 // 16 = 01 0000
#define flag6 32 // 32 = 10 0000

if (myvalue & flag1)
// flag1 was set

if (myvalue & flag4)
// flag4 was set

等等。您还可以检查在循环中设置了哪些位:

#include <stdio.h>

int main() {
int myvalue = 28;
int i, iter;

for (i=1, iter=1; i<256; i<<=1, iter++)
if (myvalue & i)
printf("Flag: %d set\n", iter);
return 0;
}

应该打印:

Flag: 3 set
Flag: 4 set
Flag: 5 set

关于c - 在无符号 32 位整数中查找位位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3142867/

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