2011-04-13 100 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