比特播放中的警告

问题描述

|
 BYTE original = 0xF0F0;
     BYTE bMask = 0x0000;
BYTE wMask = 0xFFFF;
BYTE  newBits = 0xAAAA;

/*& operation with \"0bit set 0\" & \"1bit give no change to original byte\" */
cout<<\"Original o: \"<<bits(original)<<endl;
cout<<\"NewBits: \"<<bits(newBits)<<endl;
cout<<\"BMask m: \"<<bits(bMask)<<endl;
cout<<\"WMask m: \"<<bits(wMask)<<endl;
cout<<\"o & m with BMask: \"<<bits(original & bMask)<<endl;/*0 set original bit as 0 */
cout<<\"o & m with WMak: \"<<bits(original & wMask)<<endl;/*1 bit put no effect on image*/
cout<<\"Result\"<<bits(original & wMask | newBits)<<endl;
我的输出正确,但我收到警告... 首先,我用char类型进行了声明,因为char在内存中占用了1Byte。但是仍然给我警告,... 然后我应用字节字节而不是字符...因为字节也占用了1Byte的内存.. 警告: 警告C4309:\'正在初始化\':截断常数值 此警告出现在所有声明行上。 如果char和Byte占用1Byte的内存,那我为什么要警告。 我在这里想念什么?谁能帮我.. 期待良好的回应 谢谢     

解决方法

例如。 “ 1”需要16位-2个字节。尝试使用
unsigned short
而不是
BYTE
    ,1字节= 8位。 0xf0f0是16位。     ,
0xf0f0
0xffff
0xaaaa
是两个字节常量,换句话说,
short int
。 编译器只是警告您,它会丢弃分配的两个字节中的最高有效字节:
0xf0f0
=>编译器分配
0xf0
;
0xffff
=>编译器分配
0xff
;
0xaaaa
=>编译器分配
0xaa
; 问题是:为什么要为期望为1字节大小的内容分配2字节常量?