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;我的OutPut是正确的,但我收到警告...
首先,我使用char类型进行声明,因为char占用内存中的1Byte。但这还是给了我警告...
然后我应用BYTE byte而不是char...because BYTE,也在内存中使用1Byte。
警告:警告C4309:‘初始化’:常量值的截断
此警告显示在所有申报行上。如果char和Byte占用内存中的1Byte,那么为什么我收到警告..这里我漏掉了什么?有人能帮帮我吗?期待一个好的回应谢谢
发布于 2011-04-13 22:50:48
例如,0xF0F0需要16位-2字节。尝试使用unsigned short而不是BYTE
发布于 2011-04-13 22:52:35
1字节=8位。0xf0f0为16位。
发布于 2011-04-13 22:54:19
0xf0f0、0xffff和0xaaaa是两个字节的常量,换句话说就是一个short int。
编译器只是警告你,它正在丢弃你赋值的两个字节中最重要的字节:
0xf0f0 =>编译器赋值0xf0;
0xffff =>编译器赋值0xff;
0xaaaa =>编译器赋值0xaa;
问题是:为什么你想把一个2字节的常量赋值给你期望的1字节大小的东西呢?
https://stackoverflow.com/questions/5651169
复制相似问题