我有一个数字是“有效字节”,它可能是 0 或 255。
这意味着 0 或 -1。
如何一次将 255 转换为 -1。
我有一个对我不起作用的功能:
acc->x = ((raw_data[1]) << 8) | raw_data[0];
我有一个数字是“有效字节”,它可能是 0 或 255。
这意味着 0 或 -1。
如何一次将 255 转换为 -1。
我有一个对我不起作用的功能:
acc->x = ((raw_data[1]) << 8) | raw_data[0];
假设每 8 位设置为 1 表示负数(254 == -2),那么从有符号类型的扩展转换应该这样做:
int n = (signed char)somebyte;
所以
unsigned char rawdate[2] = ...;
int msbyte = (signed char)rawdata[1];
acc->x = (msbyte << 8) | (raw_data[0] & 0xFF);
我不确定需要什么,但这里是整数算术转换的规则。
如果将一个整数分配给另一个低位整数,则数据将被截断。
例子:
struct A {
int c1 : 8;
unsigned c2 : 8;
} a;
int main()
{
short int i = 255; // right 8 bits containing all bits set
a.c1 = i; // or a.c1 = 255. casting not required.
a.c2 = i; // same as above.
// prints -1, 255
printf("c1: %d c2: %d\n", a.c1, a.c2);
i = 511; // 9 number of 1 bits
a.c1 = i; // left 9th bit will be truncated. casting not required.
a.c2 = i; // same as above
// prints -1, 255
printf("c1: %d c2: %d\n", a.c1, a.c2);
return 0;
}
如果将有符号的 8 位整数(或 char)分配给更高位的整数(比如 int),它的符号位将被移动。
前任:
char c = 255; // which is -1
int i = c; // i is now -1. sign bit will be shifted to 32nd bit.