所以我有一个奇怪的问题。是什么造成了这种情况?
#include <inttypes.h>
#include <stdio.h>
#include <string.h>
int main()
{
int16_t a = 0;
int8_t b = 0;
b = INT8_MIN;
void* a_ptr = &a;
void* b_ptr = &b;
memcpy(a_ptr,b_ptr,sizeof(int8_t));
printf("min b: %d | copied a: %d", b, a);
}
结果是:min b:-128 |复制了一个:128。
所有负值似乎都有这个问题。 我想使用memcpy,那么我该怎么做呢?
答案 0 :(得分:2)
你可以这样看:
假设&#34; a&#34; (16位)获取1000,1001的地址(字节)并将其初始化为0。 假设&#34; b&#34; (8位)取2000的地址。
之前:
00000000 00000000 10000000
address: 1000 1001 ... 2000
memcpy之后
10000000 00000000 10000000
address: 1000 1001 ... 2000
其中(假设常见的小端拱)转换为+128,因为读操作是在16位而不是8位。
由于符号扩展(小端),A -128看起来像这样:
10000000 11111111
address: 1000 1001