#include<stdio.h>
int main()
{
struct value
{
int bit1:1;
int bit3:4;
int bit4:4;
}bit={1,8,15};
printf("%d%d%d",bit.bit1,bit.bit3,bit.bit4);
return 0;
}
输出为:-1-8-1
我知道这是因为无符号位,但对我说的更多。无法得到为什么8张打印-8和为什么15张打印-1。
答案 0 :(得分:4)
int bit4:4;
已签名,因此范围为[-8..7]。将其设置为15相当于0b1111。假设为2s complement,则相当于-1。
类似于bit3
,8相当于0b1000。顶部位告诉您这是一个负值。反转其他位然后加1会得到-8。
如果要存储值[8..15],则需要5位有符号值或将类型更改为unsigned int
答案 1 :(得分:1)
对于4位,16位组合为interpreted,如下所示:
0000 : 0
0001 : 1
0010 : 2
0011 : 3
0100 : 4
0101 : 5
0110 : 6
0111 : 7
1000 : -8
1001 : -7
1010 : -6
1011 : -5
1100 : -4
1101 : -3
1110 : -2
1111 : -1
您设置的数字对应0001
(1),1000
( - 8)和1111
( - 1)。