gpt4 book ai didi

c - 16 位数字的 2 补码

转载 作者:行者123 更新时间:2023-11-30 18:31:18 28 4
gpt4 key购买 nike

UInt16 Checksum16Calculate(CHECKSUM_16_TYPE* pChecksum)
{
//calculate twos compliment of checksum
pChecksum->usTwosCompliment = ~(pChecksum->usChecksum) + 1;

//store raw checksum for diagnostics
pChecksum->uiChecksumWatch = pChecksum->usChecksum;

return pChecksum->usTwosCompliment;
}



typedef struct
{
UInt16 usChecksum;
UInt16 usWordCount;
UInt16 usTwosCompliment;
UInt32 uiChecksumWatch;
}
CHECKSUM_16_TYPE;

我使用 CHECKSUM_16_TYPE 类型的 &oChecksum 调用 CheckSumCalculate。假设计算校验和之前的数字是 10010101110。手动取其二进制补码得到 1101010010。但是我得到的数字是 111110 1101010010。忽略粗体数字我会得到正确的答案。我认为发生这种情况是因为我取 2 的补码的数字是 16 位数字,因此它将未使用的 0 切换为 1。我该怎么做才能解决这个问题?

最佳答案

没有什么可修复的。数字10010101110表示为16位二进制数为0000010010101110;它的 2 的补码只能是 1111101010001010

关于c - 16 位数字的 2 补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25087891/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com