我看过他们使用的一些代码'0x0000FFFFFFFFFFFFLL'.我不知道它做了什么.有人可以解释一下这段代码的作用.
int64 l1;
l1 = *(Int64 *)&d1 & 0x0000FFFFFFFFFFFFLL;
Run Code Online (Sandbox Code Playgroud)
虽然这不适合'stackoverflow'但我无处可寻.我是编程新手,请帮忙.
0x0000FFFFFFFFFFFFLL是long long intC和C++中的常量,保证具有一定的最小值范围,用于处理比通常使用的数字更大的数字int或long (a).
在这种特殊情况下,除了最右边的48(每个F是4位)之外,它设置为零.
至于它为什么这样做,它几乎,但不完全(基于变量名称和你在注释中提到d1的double变量)一段代码,它给你一个double(IEEE754双精度)变量的小数位.
根据IEEE754-1985维基百科页面,64位值的结构如下:

前十二位是符号和指数所以,如果它是0x000FFFFFFFFFFFFFLL(十三F位而不是十二位),那可能就是原因.但是,除非你在输入值时犯了错误,否则它的可能性就会降低.如果没有进一步的情况下,这将是很难确定什么样的总体目标(而不是效应).
对于按位运算符(例如&,按位运算AND符)的精度,请参阅此堆栈溢出答案.
(a)从技术上讲(至少对于C来说),它只需要至少与a一样"宽"(就位而言)long(反过来,只需要至少与a一样宽int).实际上,它们可以具有相同的大小,同时牢记long long必须能够存储范围内的数字+/- 9,223,372,036,854,775,807(7fffffffffffffff以十六进制表示)的要求,因此可以轻松地保持给定的常量.