问题描述
struct A
{
int a:2;
int b:3;
int c:3;
};
int main()
{
struct A p = {2,6,1};
printf("\n%d\n%d\n%d\n",p.a,p.b,p.c);
return 0;
}
输出为:
-2,-2,1
Output is: -2,-2,1
将上面什么code的输出用C编译器和C ++编译器?
为什么?
What would be output of above code in C complier and in C++ complier?And Why?
推荐答案
现在让我们来看看究竟发生了什么。让我们开始给定的code:
Now Lets see what exactly is happening. Lets start with the given code:
struct A
{
int a:3;
};
int main()
{
struct A p = {5};
printf("%d",p.a);
}
3位中的值是101(5),因为这3位设置的符号位为1因而负值。因此,我们需要找到2的101恭维这将是011(3)。
因此,通过应用上述我们会为-3输出逻辑。同样其他可以证明。
within 3 bits the values would be 101(5) since sign bit of this 3 bit set is 1 thus negative value. Thus we need to find 2's compliment of 101 which would be 011(3).Thus by applying above logic we would output as -3. Similarly others could be proved.
例如。 1001(9),我们应采取,因为一个3位值:3。因此这将是001(1)。由于这里签位没有设置,即1所以没有必要使用2的补。直截了当的答案是1。
同样别人可以做的。
e.g. for 1001(9) we shall take 3 bit values because of a:3. thus it would be 001(1). Since here sign bit is not set i.e. 1 so no need to use 2's complement. Straight forward answer would be 1.Similarly others could be done.
这篇关于位域概念的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!