类型转换是否允许类型转换变量使用比原始类型更多的位?

时间:2017-11-11 11:32:34

标签: c++

使用此代码时:

    unsigned char c=1023;
    std::bitset <32> x((int)c);
    std::cout<<x<<std::endl;

输出是:

  

00000000000000000000000011111111

为什么不使用在类型转换后可以使用的整个4个字节(因为1023需要10位但char只有8个),我的意思是,在这段代码中:

     char c=68;
     cout<<sizeof(c)<<endl<<sizeof((int) c)<<endl;

输出是:

  

1

     

4

如果在类型转换后大小发生变化那么为什么它不能用更多的位?

1 个答案:

答案 0 :(得分:1)

您的代码做了什么(我认为unsigned char是8位类型)?

unsigned char c=1023;

这里,由于unsigned char是8位,因此1023不适合。因此,根据标准c值将是1023模256 = 255(即1023的最高2位丢失)。

std::bitset <32> x((int)c);

在此,您将c投射到int。请注意,此处 c不会“返回”其丢失的位,因此投射结果将为255.

当然,cout将以二进制打印255,这就是你得到的。