提问者:小点点

为什么在C++中使用char math会导致意想不到的结果?


我有一个函数,我很难理解数学是如何执行的:

    unsigned long Fat_AuthAnswer(char b1, char b2, char b3, char b4)`
    {
    unsigned char* ptr = NULL;
    unsigned short StartCRC = b1 + b2*256;
    unsigned long ret = crcbuf(StartCRC, b3, &AuthBlock[b4]);
        ret = (ret & 0x0000ffff) | (crcbuf(StartCRC, b4, &AuthBlock[b3])<<16);
    }

B1=0xAF,B2=0x50

当函数执行时,StartCRC=b1+b2*256;产生StartCRC=0x4FAF

我原以为StartCRC的结果为0x50AF。

我的问题是为什么看起来b2减少了一个?如有任何帮助,我们将不胜感激。谢谢


共1个答案

匿名用户

您的环境中的似乎被签名,并且值被签名扩展到值行。这将导致被添加到的一部分,因此看起来被减少了一。

您应该将强制转换为以避免这种情况。

    unsigned short StartCRC = static_cast<unsigned char>(b1) + b2*256;

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|char|math|导致|意想不到)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?