为什么要把-1转换成无符号整数

时间:2022-04-11 17:40:30
void CMyListBox::DrawItem (LPDRAWITEMSTRUCT lpdis)
{
    CDC dc;
    dc.Attach (lpdis->hDC);
    CRect rect = lpdis->rcItem;
    int nIndex = lpdis->itemID;

    CBrush* pBrush = new CBrush;
    pBrush->CreateSolidBrush (::GetSysColor ((lpdis->itemState &
        ODS_SELECTED) ? COLOR_HIGHLIGHT : COLOR_WINDOW));
    dc.FillRect (rect, pBrush);
    delete pBrush;

    if (lpdis->itemState & ODS_FOCUS)
        dc.DrawFocusRect (rect);

    if (nIndex != (UINT) -1)  //这一句,很奇怪啊,为什么要把-1转换成无符号整数,据我了解,无符号整数就是正数
        dc.DrawIcon (rect.left + 4, rect.top + 2,
            (HICON) GetItemData (nIndex));

    dc.Detach ();
}

9 个解决方案

#1


-1转化成无符号整数就成了最大的无符号整数。。。

#2


以前这里是? UINT nIndex = lpdis->itemID;

#3


-1 == 0xFFFFFFFF

#4


int nIndex = lpdis->itemID; 
//如果这句是 UINT nIndex = lpdis->itemID; 
//那么nIndex != (UINT) -1还有点道理,现在的情况,转换完全没有理由。

#5


不转换也可以。

#6


一般地,nIndex=-1表示列表项目尾端,可以不转换,如果转换的话,那么就要化为unit类型,使得这个值为最大,即达到尾端.

#7


up

#8


转换是无意义的!

UINT nIndex = lpdis->itemID; 
nIndex != (UINT) -1
转换也是无意义的!

0xffffffff这个数据,你按无符号来看,就是0xffffffff,按有符号来看,就是-1,不管你怎么看,他们都是同一个数,所以:
UINT iii = 0xFFFFFFFF;
if (-1 == iii)
AfxMessageBox(_T("ok"));
判断同样成功!

#9


只有在数据位数不同时(且从低位数据向高位数据转换时),转换才有意义,我举个例子:
int i;
char c = -1;

i = c; //结果i等于-1
i = (BYTE) c; //结果i等于255

#1


-1转化成无符号整数就成了最大的无符号整数。。。

#2


以前这里是? UINT nIndex = lpdis->itemID;

#3


-1 == 0xFFFFFFFF

#4


int nIndex = lpdis->itemID; 
//如果这句是 UINT nIndex = lpdis->itemID; 
//那么nIndex != (UINT) -1还有点道理,现在的情况,转换完全没有理由。

#5


不转换也可以。

#6


一般地,nIndex=-1表示列表项目尾端,可以不转换,如果转换的话,那么就要化为unit类型,使得这个值为最大,即达到尾端.

#7


up

#8


转换是无意义的!

UINT nIndex = lpdis->itemID; 
nIndex != (UINT) -1
转换也是无意义的!

0xffffffff这个数据,你按无符号来看,就是0xffffffff,按有符号来看,就是-1,不管你怎么看,他们都是同一个数,所以:
UINT iii = 0xFFFFFFFF;
if (-1 == iii)
AfxMessageBox(_T("ok"));
判断同样成功!

#9


只有在数据位数不同时(且从低位数据向高位数据转换时),转换才有意义,我举个例子:
int i;
char c = -1;

i = c; //结果i等于-1
i = (BYTE) c; //结果i等于255