2011-04-13 99 views
0
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,那么为什么我得到警告.. 我在这里失踪了什么?任何人都可以帮助我.. 期待良好的回应 谢谢

+0

请不要关闭这个问题......你可以直接说我的问题不清楚......但请不要关闭它...... – RidaSana 2011-04-13 14:51:10

+2

所有的初始化常量都是* 2字节*。你为什么期望它们适合1个字节? – AnT 2011-04-13 14:53:52

+0

十六进制数字是4位,您试图存储的值是16位。你需要两个字节来存储这些常量,所以试试'unsigned short'而不是'BYTE',它只有1个字节。 – 2011-04-13 15:06:51

回答

3

E.g. 0xF0F0需要16位 - 2个字节。用unsigned short代替​​

+0

@Erik:为什么unsigned short ..? – RidaSana 2011-04-13 14:53:50

+0

@Miss:因为我猜测你的平台上有16位宽。如果您恰好位于较小的平台上,请使用unsigned int或long。 – Erik 2011-04-13 14:55:26

+0

@Erik:它的作品出来了,但问题是为什么unsigned short? – RidaSana 2011-04-13 14:55:29

0

1字节= 8位。 0xf0f0是16位。

+0

我不知道我应该使用哪种数据类型,为什么? – RidaSana 2011-04-13 14:54:55

+0

您可以使用sizeof(数据类型)'来检查使用哪种类型(如果您不了解您的平台)。使用'cout << sizeof(byte)<<“”<< sizeof(unsigned int <<(依此类推)),直到找到哪一个长度为2个字节。 – RedX 2011-04-13 15:00:11

+0

好unsigned int&unsigned long在我的机器上需要4个字节 – RidaSana 2011-04-13 16:11:07

0

0xf0f0,0xffff0xaaaa是两个字节常数,换句话说是short int

编译器只是警告你,这是扔掉两个要指定的最显著字节:

0xf0f0 =>编译器分配0xf0;
0xffff =>编译器分配0xff;
0xaaaa =>编译器分配0xaa;

现在的问题是:为什么要为您期望的1字节大小分配一个2字节的常量?

+0

@simone:好吧,我分配2字节但我得到1字节的结果...我只是想看看结果,当我分配2字节时发生什么... – RidaSana 2011-04-13 15:04:11

+0

常量实际上是整数 - 但他们转换没有损失无符号短,所以不需要编译器警告 – Erik 2011-04-13 15:08:03

+0

@Erik:谢谢你能否也请看到这个问题:http://stackoverflow.com/q/5650408/705418 – RidaSana 2011-04-13 15:10:06