小编tom*_*502的帖子

将大量类型转换为较小的类型

我已经好好看了一下,找不到类似的问题,如果之前被问过,请道歉.

我只是在玩类型和数字,我想知道是否可以保证以下行为.如果我将2个变量声明为

unsigned char BIT_8 = 0;
unsigned short int BIT_16 = 0xFF01;
Run Code Online (Sandbox Code Playgroud)

然后执行以下操作(暂时忽略C样式转换,除非这会影响它?)

cout << "BIT_16: " << BIT_16 << "\n";
cout << "BIT_8: " << (int)BIT_8 << "\n";
BIT_8 = BIT_16;
cout << "BIT_8 after: " << (int)BIT_8 << "\n";
BIT_8 = BIT_16 >> 8;
cout << "BIT_8 after shift: " << (int)BIT_8 << "\n";
Run Code Online (Sandbox Code Playgroud)

我得到了输出

BIT_16: 65281
BIT_8: 0
BIT_8 after: 1
BIT_8 after shift: 255
Run Code Online (Sandbox Code Playgroud)

是否保证如果我将16位类型转换为8位类型,则前导字节将丢失?或者它是不确定的,上面的结果是运气?

c++ types

18
推荐指数
1
解决办法
9037
查看次数

使用VS2010的C++中的位集

我无法弄清楚我在这里做错了什么,希望有人在这里可以启发我.

我有一个类Flags,这是一个非常简化的版本,但我声明了一个bitset

class Flags
{
private:
    //List of 8 bits
    std::bitset<8> _P;
public:
    Flags();
}
Run Code Online (Sandbox Code Playgroud)

在我的构造函数上,我将其初始化为

Flags::Flags()
    : _P(32ul)
{}
Run Code Online (Sandbox Code Playgroud)

但它不会编译并给我错误

错误C2668:'std :: bitset <_Bits> :: bitset':对重载函数的模糊调用

这是在VS2010 SP1 64位编译但作为32位程序

编辑

接受的答案是针对上述情况,但作为旁注,任何人都可以解释为什么当使用默认构造函数(它应该将它们全部初始化为零)时,它们并不都设置为零?

_p.to_ulong()
Run Code Online (Sandbox Code Playgroud)

返回1390560944,_p看起来像

[8](0,0,0,0,1,1,0,1)
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio-2010 bitset

3
推荐指数
1
解决办法
1775
查看次数

标签 统计

c++ ×2

bitset ×1

types ×1

visual-studio-2010 ×1