gpt4 book ai didi

c - 需要使用位操作进行一些错误识别

转载 作者:太空宇宙 更新时间:2023-11-04 04:27:40 25 4
gpt4 key购买 nike

问题是 SegmentOFF。例如,如果 DATA[18] = 0x10 在调用 SegmentON 之后,我想清除 DATA[18] 的第 6 位。调用 SegmentOFF 清除所有位并结束 DATA[18] = 0x00

代码有什么问题。

unsigned char DATA[24];     
unsigned int Segment2BitMap[48] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0204, 0x0300, 0x0302, 0x0307, 0x0600, 0x0601, 0x0602, 0x0603,
0x0604, 0x0605, 0x0606, 0x0607, 0x0804, 0x0900, 0x0902, 0x0907,
0x0C00, 0x0C01, 0x0C02, 0x0C03, 0x0C04, 0x0C05, 0x0C06, 0x0C07,
0x0E04, 0x0F00, 0x0F02, 0x0F07, 0x1200, 0x1201, 0x1202, 0x1203,
0x1204, 0x1205, 0x1206, 0x1207, 0x1404, 0x1500, 0x1502, 0x1507
};

void SegmentON(unsigned char Number)
{
unsigned int Data = Segment2BitMap[Number];
unsigned char UpperByte = (Data/256); //upper byte
unsigned char LowerByte = (Data%256 & 0x07); //lower byte
DATA[UpperByte] |= (0x01<<LowerByte);
}

void SegmentOFF(unsigned char Number)
{
unsigned int Data = Segment2BitMap[Number];
unsigned char UpperByte = (Data/256); //upper byte
unsigned char LowerByte = (Data%256 & 0x07); //lower byte
DATA[UpperByte] &= (0x01<<LowerByte);
}

int main()
{
SegmentON(40);
SegmentOFF(42);
}

最佳答案

 1010 & 0101 == 0000 

如果你想清除一个特定的位而其余的不应该被改变你必须反转它。

对于 8 位:

var &= (1<<2)^0xFF

这将设置第 3 个最低有效位 (1<<2) == 0x04然后用异或将其反转

然后将该掩码应用于 var 以将第 3 位设置为零,其余保持不变

这是

var = var & 0b11111011

关于c - 需要使用位操作进行一些错误识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39915032/

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