警告与位
问题描述:
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类型声明,因为炭取1字节内存..但仍然是给我的警告,。 ..
然后我申请字节来代替字符...因为BYTE还需要1字节内存..
警告: 警告C4309: '初始化':定值
截断这个警告是在所有的声明行.. 如果字符和字节在内存中采取1Byte,那么为什么我得到警告.. 我在这里失踪了什么?任何人都可以帮助我.. 期待良好的回应 谢谢
答
0xf0f0
,0xffff
和0xaaaa
是两个字节常数,换句话说是short int
。
编译器只是警告你,这是扔掉两个要指定的最显著字节:
0xf0f0
=>编译器分配0xf0
; 0xffff
=>编译器分配0xff
; 0xaaaa
=>编译器分配0xaa
;
现在的问题是:为什么要为您期望的1字节大小分配一个2字节的常量?
请不要关闭这个问题......你可以直接说我的问题不清楚......但请不要关闭它...... – RidaSana 2011-04-13 14:51:10
所有的初始化常量都是* 2字节*。你为什么期望它们适合1个字节? – AnT 2011-04-13 14:53:52
十六进制数字是4位,您试图存储的值是16位。你需要两个字节来存储这些常量,所以试试'unsigned short'而不是'BYTE',它只有1个字节。 – 2011-04-13 15:06:51