#include<stdio.h>
int main()
{
struct byte
{
int one:1;
};
struct byte var = {1}; // statement A
printf("%d", var.one);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我想我们已经将整数变量'one'的位存储器限制为1,即; 它只能存储0和1而在'语句A'我们用'1'初始化了这个变量,这应该没问题,因为'one'仍然可以在其内存中保留一点但是它在控制台上打印-1!有帮助吗?
它是实现定义与类型定义的比特字段是否int等于signed int或unsigned int.(这仅适用于位字段;否则int与signed int.字段完全相同.)
如果int one:1;已签名(因为它似乎在您的实现中),那么该单个位是符号位,唯一可能的值是0和-1.值1,你已经用于初始化它,因为它是超出范围,被隐式转换到-1.(实际上,转换的结果是实现定义的.)
将声明更改为:
unsigned int one:1;
Run Code Online (Sandbox Code Playgroud)
它可以有价值0和1.比特字段通常应该是显式无符号的,除非你真的需要它们进行签名 - 在这种情况下你应该使用signed int而不是int.
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |