bitset<32> s(0xffff)

xotao831022 2008-12-09 09:22:32
bitset<32> s(0xffff);在对这个bitset的位操作初始化的时候C++primer里面说 这个时候s被初始化为16个1和16个0;这个是为什么是??我看0xffff就是表示一个16进制的数啊!而且应该是32个1啊?到这边怎么变成16个1和16个0 !肯定是我理解错了,请大家帮忙解释一下啊!
...全文
247 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhyinty 2008-12-10
  • 打赏
  • 举报
回复
4x4 = 16
ningweidong 2008-12-10
  • 打赏
  • 举报
回复
我看0xffff就是表示一个16进制的数啊!而且应该是32个1啊?

你自己都算错了吧,0xffff是16个1啊.
cba_v 2008-12-09
  • 打赏
  • 举报
回复
up
nullah 2008-12-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lc19890326 的回复:]
C/C++ code
#include <iostream>
#include <bitset>
using namespace std;

int main()
{
bitset<32> s(0xffff); //这里ffff为16位,把低16位初始化为1,高16位为0
cout<<s<<endl;
return 0;
}




1个f代表4个1,ffff就是16个1啊
[/Quote]
顶~~~~
hhyttppd 2008-12-09
  • 打赏
  • 举报
回复
楼主纯属浪费分。。。

stl也是可以调试的,你跟进去看看就知道了啊。。
帅得不敢出门 2008-12-09
  • 打赏
  • 举报
回复
bitset <32> s(0xffff);
是0x0000ffff
16个0 16个1
因为是32位的,而不是16位,所以其他的位是要补上的.
对于16位0x01为0x0001
对于32位0x01为0x00000001
roadblossom 2008-12-09
  • 打赏
  • 举报
回复
如果是32个1 , 那就成了0xffffffff了
roadblossom 2008-12-09
  • 打赏
  • 举报
回复
0xf 等于二进制的1111,0xffff就是16个1老,因为s是bitset<32>, 也就是32位的,所以s实际上是0x0000ffff, 16个0, 16个1, hoho
lgccaa 2008-12-09
  • 打赏
  • 举报
回复
0xffff是16进制,每位表示4位的二进制数,4个16进制数是16个二进制数,不知道楼主怎么算的
0xffff是16个1
Mougou 2008-12-09
  • 打赏
  • 举报
回复
写代码测试之。
ps:尽信书则不如无书。
moolf 2008-12-09
  • 打赏
  • 举报
回复
我也在看C++primer 以后可以以一起探讨!
taigx007 2008-12-09
  • 打赏
  • 举报
回复
楼主就是浪费积分啊,自己写一下程序,调试就可以了!
tangshuiling 2008-12-09
  • 打赏
  • 举报
回复

bitset<32> s(0xffff);
首先,要搞清楚的问题是bitset是个模板类结构,其类bitset的声明格式是:
template<size_t _Bits> class bitset;
其中的_Bits就是楼主代码定义中的32啦,表示构造的s类对象有32位数据,因此,就算你的s(0xf)只有一个f,对s来说还是32位,这在一开始定义就固定了!
其次,0xffff为16位全1,0xffffffff为32位全1,16位全1那剩下的16位自然是全0啦
  • 打赏
  • 举报
回复
0xffff摆明就是16个1撒,一个f是1111,难道不是吗?
wind00sky 2008-12-09
  • 打赏
  • 举报
回复
写个程序试试就知道了。有些东西不一定非得记得条条目目
zy1691 2008-12-09
  • 打赏
  • 举报
回复
bitset <32> s(0xffff);
这个操作的意思就是把低16位置1,高16位没有赋值,所以是0,很正确。
lc19890326 2008-12-09
  • 打赏
  • 举报
回复

#include <iostream>
#include <bitset>
using namespace std;

int main()
{
bitset<32> s(0xffff); //这里ffff为16位,把低16位初始化为1,高16位为0
cout<<s<<endl;
return 0;
}


1个f代表4个1,ffff就是16个1啊
wryse 2008-12-09
  • 打赏
  • 举报
回复
一位16进制数转成二进制有4位,因此32位的二进制就是8位的16进制数,初始化的0xffff是个4位的16进制数,因此是16位的二进制数也就是16个1,然后s的前16位也就填0了……

65,211

社区成员

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

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