C++ bitset 0xffff 小白问题

franzhong 2019-09-17 11:31:36



//on a 32-bit machine,bits 0 to 31 initialized from 0xffff
bitset<128> bitvec3(0xffff);//bits 32 through 127 initialized to zero

以上是c++ primer page.102上作者说的啊

问题:
1、操作系统是64位windows,0xffff还是16位的,文中的32-bit是神马机器?
2、注释上说32到127会被初始为0,这可能吗?我输出的是000....001111...11;//一堆0加16个1,最后必然是1呀?

3、文号还有一句话晦涩难懂啊
When we initialize a bitset from a string,the string represents the bit pattern directly.the bits are read from the string from right to left.
//string strval("1100");
//bitset<32> bitvec4(strval);
以上内容输出的是000。。。1100;
这个明显是非倒序右位赋值,为啥说the bits are read from the string from right to left.听起来跟string要反转一样(flip)。
...全文
152 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gouyanfen 2019-09-18
  • 打赏
  • 举报
回复
32,64位指的是总线,这方面还是看下计算机原理比较容易明白,任何时候0xF都是十六进制的10只需要4Bit就可以表示,不能因为总线升级了,一个F就需要更多的位数表示了,所以0xFFFF显示还是一样多的1,升级是为了寻址更大的空间和单个时钟周期运算量的增强,可以拥有更多的指令空间。跟你0xFFFF表示多少个1没有关系
franzhong 2019-09-18
  • 打赏
  • 举报
回复
第二第三个问题貌似往下看明白了,测试了一下有点点懂了,原来bitset的第一位就是最后一位,最后一位就是第一位啊,这太逆天了吧。。。所说的32-127是倒着数的,晕,自己倒了string初始化却是正着的(1100)

bitvec.flip(0);//居然最后一位1变0了
那问题一:32位指的是cpu?那系统提示的64是怎么回事?在64位机器下,0xffff就变成64个1了?

64,654

社区成员

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

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