__int64的奇怪列表输出
Weird list output of __int64
我的__int64
和%I64u
有问题。也许是我的配方有问题。我试图模仿下面的输出。但是在一些行项目中发生了一件奇怪的事情。我不明白发生了什么,因为别人都印得很好。
注:这些列表的主要来源是二进制原始数据。所以我从十六进制中取出它,并试图在__int64
中转换它。我的列表由120
行项目组成,它输出良好,直到73
行,从74
行失败,期望值为2276812558
,显示18446744071691396878
。从74
行到120
行,结果是intermittent
。其他行正常,其他行失败。
有人帮助吗? ?
源:74 2276812558 <-- expected output
...
110 88343310421 <-- expected output
111 101677534814 <-- expected output
112 116372862414
113 132547934111 <-- expected output
114 150330130721
115 169856101434 <-- expected output
116 193905458276
117 220253625665
118 249089120712 <-- expected output
119 280613529205
120 315042247217
下面是我的代码:
longint = (__int64)((col[3] << 24) | (col[2] << 16) | (col[1] << 8)) | ((col[0]) | (__int64)((col[7] << 56) | (col[6] << 48) | (col[5] << 40) | (col[4] << 32)) << 32);
sprintf(longintbuf,"%I64u", longint );
。输出生成
74 18446744071691396878 <-- err
...
110 18446744071858548821 <-- err
111 18446744072307871326 <-- err
112 116372862414
113 18446744073113499551 <-- err
114 150330130721
115 18446744071766961210 <-- err
116 193905458276
117 220253625665
118 18446744073690569160 <-- err
119 280613529205
120 315042247217
如果col
不是64位类型的数组,则您的移位会导致未定义的行为。移动前强制转换:
(__int64)col[7] << 56
如果移位会导致符号改变,这也是未定义的行为,所以在使用带符号类型时要小心(就像你一样)。
来自C11 6.5.7位移位运算符(强调我的):
在每个操作数上执行整数提升。结果的类型是提升后的左操作数的类型。如果右操作数的值为负或大于等于提升后的左操作数的宽度,则未定义该行为。
E1 << E2
的结果是E1
左移E2
位;空出的位被0填充. ...如果E1
有符号类型且非负值,且E1
× 2E2在结果类型中是可表示的,则该值为结果值;否则,行为是未定义的。
相关文章:
- SQLite3 在 c++ 中输出 SELECT 上的空列表
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- gdb 中的列表命令不输出我编写的代码
- 如何将地图<列表<string>、矢量<string>>输出到输出文件?
- Linux MinGW:在编译时,他输出了 8 个"nultiple definitions"列表
- 如何使用GNU将过滤器输出从目录中列表
- 通过查找一对项目的代码获取错误的输出,在给定的总和相等的给定列表中列表
- 音频缓冲区列表,用于输出流格式已压缩的 AUHAL 单元
- 聚输出错误 - 链接列表
- 格式化输出以显示在错误列表的消息部分中
- 创建邻接列表时的输出不一致
- 我写了一个函数来删除循环链接列表中的第 1 个节点,但输出显示无限次"55 44 33 22 11 99",那么我该如何解决呢?
- C 链接列表仅输出其他每个元素
- 如何使用QREGEXP解析PACMD列表输出并查找接收器索引和名称
- 如何扫描 N 个字符串(使用结构),然后反向输出该字符串列表
- 对于每个单词输出一个对列表,行号和该行的字数
- 有没有一种方法可以在两列中显示我的素数列表输出
- 重载输出运算符<<以使用 STL 列表迭代器
- 家庭作业帮助:用户制作的列表输出
- __int64的奇怪列表输出