在下面的代碼中,我得到A = -1作爲輸出。我想,這是因爲我正在溢出3位的A成員。 我在這方面有兩個問題:爲什麼結構成員似乎有溢出價值?
- 不應該編譯器考慮最後3位,並忽略其餘成員A?爲什麼價值是負面的?
- 如果考慮所有位,爲什麼我會得到B = 0的值作爲輸出?
我以爲A會有7的值,但我顯然是誤解了一些東西。請幫忙。
#include <stdio.h>
typedef struct
{
char A: 3;
char B: 3;
char C: 3;
}my_struct;
my_struct new_object = {0};
void main(void)
{
new_object. A = 63;
printf("A = %d\n", new_object.A);
printf("B = %d\n", new_object.B);
}
是不是將63分配給一個未定義的行爲?所以結果可能是任何事情。 –
@CostantinoGrana:不,它不是。它不是'char c = 0xffff;'不是。感謝C的隱式轉換。 – alk
@alk:感謝您提供的信息。我不知道位域是否包含在整數轉換中。 –