-2

我必须编写一个函数setbits(x,p,n,y),该函数返回从位置开始xn位,该位置设置为unsigned char 变量的p最右侧位(其他位保持不变)。ny

例如,如果x = 10101010 (170 decimal)and y = 10100111 (167 decimal)and n = 3andp = 6说 then 你需要去掉 3 位y (111)并将它们放在x适当的位置10xxx010以获得答案10111010

这个函数应该以二进制形式打印出结果。

输出应该是这样的:

x = 10101010 (binary)
y = 10100111 (binary)
setbits n = 3, p = 6 gives x = 10111010 (binary)

嗨,我在位字段中遇到了这个问题。
我应该怎么做?

Typedef struct {
    unsigned char x:8;
    unsigned char y:8;
} var;
4

3 回答 3

0

char 不是位字段的允许类型,它们必须是 int 类型。如果您使用 char,您将调用 C 标准未涵盖的实现定义的行为(参见 ISO 9899:1999 6.7.2.1 §4)。

因此,如果不知道您使用的是什么系统和编译器,就不可能回答您的问题。

于 2011-02-28T09:59:59.847 回答
0

位域是与此无关的特定 C 发明。例如,你可以有

struct RGB16 {
   unsigned int R : 5;
   unsigned int G : 6;
   unsigned int B : 5;
};

这是一个 16 位结构,有 3 个组件,每个组件都小于一个字节。但是,C 标准没有说明它们的相对位置。您不能假设它们在内存中以RRRRRGGGGGGBBBBB. 此外,位域宽度是恒定的,在您的情况下,所需的位是可变的。因此,谷歌搜索“C 位域”不会帮助您解决这个问题。

至于您的问题,您应该知道x & binary(11000011)将中间 4 位清零,并将中间 4 位y | binary(00111100)设置为 1。

于 2011-02-28T09:39:01.103 回答
-1

t = y<<(8-n) k = t>>p; 打印 x&k;

假设每个比特流是 8 比特。

于 2011-02-28T09:39:33.857 回答