stdint.h和inttypes.h有什么区别?
如果没有使用它们,则无法识别uint64_t,但使用其中任何一个都是定义的类型.
考虑以下展示uint64
数据类型的简短 numpy 会话
import numpy as np
a = np.zeros(1,np.uint64)
a
# array([0], dtype=uint64)
a[0] -= 1
a
# array([18446744073709551615], dtype=uint64)
# this is 0xffff ffff ffff ffff, as expected
a[0] -= 1
a
# array([0], dtype=uint64)
# what the heck?
Run Code Online (Sandbox Code Playgroud)
我对最后的输出完全感到困惑。
我期望 0xFFFF'FFFF'FFFF'FFFE。
这里究竟发生了什么?
我的设置:
>>> sys.platform
'linux'
>>> sys.version
'3.10.5 (main, Jul 20 2022, 08:58:47) [GCC 7.5.0]'
>>> np.version.version
'1.23.1'
Run Code Online (Sandbox Code Playgroud) 我在c ++下编程时遇到了一件奇怪的事情.这是一个简单的乘法.
码:
unsigned __int64 a1 = 255*256*256*256;
unsigned __int64 a2= 255 << 24; // same as the above
cerr()<<"a1 is:"<<a1;
cerr()<<"a2 is:"<<a2;
Run Code Online (Sandbox Code Playgroud)
有趣的是结果是:
a1 is: 18446744073692774400
a2 is: 18446744073692774400
Run Code Online (Sandbox Code Playgroud)
而它应该是:(使用计算器确认)
4278190080
Run Code Online (Sandbox Code Playgroud)
谁能告诉我怎么可能呢?
我在寻找代表的最大值宏uint64_t
为UINT_MAX
是unsigned int
.即我需要这个值保证为(1 << 64)-1.
我尝试使用UINT64_MAX
,但用g ++编译结果:
'UINT64_MAX' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
值得一提的是我#define __STDC_LIMIT_MACROS
在使用之前在代码中有这一行UINT64_MAX
.
我很惊讶没有在网上找到有关它的有用信息.
这是我的代码:
package main
import (
"strconv"
"fmt"
)
func main() {
t := strconv.Itoa64(1234)
fmt.Println(t)
}
Run Code Online (Sandbox Code Playgroud)
问题:
为什么会导致以下错误消息?
命令行参数.\ test.go:7:undefined:strconv.Itoa64 [以0.2秒结束,退出代码为2]
我有以下代码.sprintf中第二个%d的输出始终显示为零.我想我指的是错误的说明符.任何人都可以帮助我获得具有正确值的写字符串.这必须以posix标准实现.感谢您的投入
void main() {
unsigned _int64 dbFileSize = 99;
unsigned _int64 fileSize = 100;
char buf[128];
memset(buf, 0x00, 128);
sprintf(buf, "\nOD DB File Size = %d bytes \t XML file size = %d bytes", fileSize, dbFileSize);
printf("The string is %s ", buf);
}
Run Code Online (Sandbox Code Playgroud)
输出:
The string is
OD DB File Size = 100 bytes XML file size = 0 bytes
Run Code Online (Sandbox Code Playgroud) 在C#中,如何使用显着超过UInt64最大值(18,446,744,073,709,551,615)的数字进行存储和计算?
我试图从字符串转换为uint64_t整数.stoi
返回一个32位整数,因此在我的情况下它不起作用.还有其他解决方案吗?
这感觉就像一个愚蠢的问题,但我似乎无法看到答案.我有一个UInt64,它的最大值应该是
UInt64.MaxValue 18446744073709551615
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试分配一个中等大小的数字时,我得到"溢出错误""在检查模式下编译时操作溢出".如果我将它包装在"未经检查"的块中,那么它将编译,并运行,就像此变量为零一样:
UInt64 value1 = 1073741824 * 8; // Compile error CS0220
UInt64 value2 = 8589934592; // Actual value - no error
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
学习困难的方法,我试图在x86机器上左移一个long long
并uint64_t
超过32位0
.我依稀记得在32位机器上移动操作符只能在前32位上操作,但不能重新收集源.我想知道是否在x86机器上移动超过32位的uint64_t整数是未定义的行为?