int a:3;是什么意思?

leqian 2004-01-24 03:42:35
int main()
{
class s
{
int a:3;
};
}
以上代码可以编译通过,请问,class中的int a:3;是什么用法?
...全文
346 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hifrog 2004-01-24
  • 打赏
  • 举报
回复
输出:
3
-4
因为二进制011为十进制3的补码,二进制100为十进制-4的补码(注意第一位是二进制数的符号位)。
hifrog 2004-01-24
  • 打赏
  • 举报
回复
恩,对于有符号整数,如果设成int a:3;
那么加上符号位它的位宽只有3位,即表示范围是-4-+3这8个整数,如果超出这个范围则溢出:程序测试如下:

#include<iostream>
int main()
{
class s
{
public: int a:3;
};
s s1;
s1.a=3;
std::cout<<s1.a<<endl;
s1.a=4;
std::cout<<s1.a<<endl;
return 0;
}
inline 2004-01-24
  • 打赏
  • 举报
回复
是定义 a 为类的"位域"成员! 例如你 int a:3;
则 a 只能用 3 位来存放数据! 超出 3 位则发生数据溢出!
一般用 unsinged int 来修饰 a ! 例如:

#include<iostream>
using namespace std;

class B
{
public:
B(int n) { x = n; }
void show() { cout << x << endl; }
private:
unsigned int x:3;
};

void main(void)
{
B obj1(7), obj2(8);
obj1.show();
obj2.show(); // 8 超出 3 位二进制位表示范围溢出为 0
}

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧