我如何从 unsigned char 中检索负值。
假设我有一个 unsigned char,我将其传递给了 fun 并且只想获得第一个 6 位。现在,这些 6 位可以具有从其他函数填充的正值或负值。我想提取相同的值。 我可以使用 0x3F 成功提取正值。但是如果它有负值例子呢
signed char my_6bitfunc( unsigned char *val )
{
unsigned char temp = *val & 0x3F;
return temp;
}
// somewhere in main
int main()
{
signed char valneg = -31 ;
signed char valpos = 31 ;
signed char a = my_6bitfunc( &valneg );
signed char b = my_6bitfunc( &valpos );
printf(" val neg %d\n", a ); // not -31 but 33 ?
printf(" val positive %d\n", b );
}
o/p
a 的期望值 = -31 实际值 = 33 为什么?错了
b 的预期值 = 31 实际值 = 31 正确。
最佳答案
要对二进制补码字段进行符号扩展,请使用 ((x ^ N) - N)
-- 其中 N
是符号位的数字表示,例如, 16 位为 32768。
signed char my_6bitfunc (unsigned char *val)
{
unsigned char temp = *val & 0x3FU;
return ((signed char )(temp ^ 0x20U)) - 0x20;
}
关于c - 从 unsigned char (Little endian) 中检索正或负 n 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46159277/