gpt4 book ai didi

c# - 为什么此输出在 C# 和 C++ 中不同?

转载 作者:太空狗 更新时间:2023-10-29 19:44:06 24 4
gpt4 key购买 nike

在 C# 中

var buffer = new byte[] {71, 20, 0, 0, 9, 0, 0, 0};

var g = (ulong) ((uint) (buffer[0] | buffer[1] << 8 | buffer[2] << 16 | buffer[3] << 24) |
(long) (buffer[4] | buffer[5] << 8 | buffer[6] << 16 | buffer[7] << 24) << 32);

在 C++ 中

#define byte unsigned char
#define uint unsigned int
#define ulong unsigned long long

byte buffer[8] = {71, 20, 0, 0, 9, 0, 0, 0};

ulong g = (ulong) ((uint) (buffer[0] | buffer[1] << 8 | buffer[2] << 16 | buffer[3] << 24) |
(long) (buffer[4] | buffer[5] << 8 | buffer[6] << 16 | buffer[7] << 24) << 32);

C# 输出 38654710855,C++ 输出 5199

为什么?几个小时以来我一直在摸不着头脑......

编辑:C# 有正确的输出。

感谢大家的帮助 :) Jack Aidley 的回答是第一个,所以我将其标记为已接受的答案。其他答案也正确,但我不能接受多个答案:\

最佳答案

C++ 无法正常工作,因为您正在转换为 long,这在大多数当前 C++ 实现中通常为 32 位,但其确切长度留给了实现者。你想要 long long

另外,请阅读下面 Bikeshedder 更完整的回答。固定大小的 typedef 是一种更可靠的实现方式,他说得很对。

关于c# - 为什么此输出在 C# 和 C++ 中不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14662010/

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