gpt4 book ai didi

结构中的C编程位域

转载 作者:行者123 更新时间:2023-12-02 01:11:52 26 4
gpt4 key购买 nike

为什么是它的答案

-1, 2, -3 ?  (especially -3 ??? how come)

struct b1 {
int a:1;
int b:3;
int c:4;
} ;
int main()
{
struct b1 c = {1,2,13};
printf("%d, %d, %d",c.a,c.b,c.c);
return 0;
}

在 VC++ 32 位编辑器上编译。非常感谢。

最佳答案

有符号整数以二进制补码表示。一位二进制补码的范围是-1到0。因为二进制补码的第一位表示它是负数,这就是你在那里所做的。

看这里: sign extend 1-bit 2's complement number?

第三个数字也是一样,你已经溢出了-8到7的范围,这是一个4位有符号整数的范围。

你的意思是让所有这些 int -> unsigned int

二进制补码解释见这里: http://www.ele.uri.edu/courses/ele447/proj_pages/divid/twos.html

关于结构中的C编程位域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16607592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com