问题描述
|
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字节常量?