标签: long-integer

不能将类型“long”隐式转换为“int?”?

这是一个非常简单的问题 - 将类型 long 变量转换为 Nullable int 类型(int?)。(见下面的例子 - 不是实际的代码)

int? y = 100;

long x = long.MaxValue;

y = x;
Run Code Online (Sandbox Code Playgroud)

我收到编译时错误。

“无法将类型‘long’隐式转换为‘int?’。存在显式转换(您是否缺少强制转换?)。

我确实有解决方案(请参阅下面的解决方案部分),我对发布问题的好奇心是推荐的 3 种解决方案?

解决方案

  y = Convert.ToInt32(x);
  y = (int)x;
  y = unchecked((int) x);  
Run Code Online (Sandbox Code Playgroud)

预先感谢您的建议

c# types nullable long-integer

0
推荐指数
2
解决办法
2万
查看次数

sscanf 将长十六进制数转换为长整型

我有很长的十六进制数,例如a3dafc126e(10 个字符长),我想使用 sscanf 读取并转换为十进制数:

long long int timestamp=0;
result = sscanf(msgPtr,"%10x", &timestamp); //msgptr contains the string a3dafc126e
printf("%lld\n",timestamp);
Run Code Online (Sandbox Code Playgroud)

然而结果是

3673952878

对应dafc126e

你能告诉我,我做错了什么吗,scanf 只读取 8 个十六进制字符而不是 10 个?

c int scanf long-integer

0
推荐指数
1
解决办法
3445
查看次数

在堆栈上分配数组时出现运行时错误

int main() {
      long long int n, m, j, l, a[1000000000][1000000000];
      int k, i;
      scanf("%lld", & n);
      scanf("%lld", & m);
      for (j = 0; j < n; j++) {
        for (l = 0; l < m; l++) {
          a[j][l] = 0;
          printf("%d\n", a[j][l]);
        }
      }
      for (j = 0; j < n; j++) {
        for (l = 0; l < m; l++) {

          printf("%d\n", a[j][l]);
        }
      }
      return 0;
    }
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我总是遇到运行时错误。有人可以建议我解决它吗???我需要这个来解决一个竞争性编程问题,其中棋盘可能有 1000000000*1000000000 个方格,我需要用它执行多项操作。

c arrays stack runtime-error long-integer

0
推荐指数
1
解决办法
66
查看次数

为什么 Java 编译器默认将 Long 数据类型视为 Double 而不是 Integer?

我是 Java 新手,在测试一些代码时偶然发现了这一点。为什么 Java 将 x(数据类型为 long)传递到接受双参数而不是整数参数的函数中。如果有人能向我解释原因,我将不胜感激(即使对你们大多数人来说这可能是一个简单的问题!)提前谢谢!

public class Hello {
public static void main (String [] args) {
    long x=1;
    System.out.println("Before calling the method, x is "+x);
    increase(x);
    System.out.println("After calling the method, x is "+x);
    System.out.println();

    double y=1;
    System.out.println("Before calling the method, y is "+y);
    increase(y);
    System.out.println("After calling the method, y is "+y);


}

public static void increase(int p) {
    p+=1;
    System.out.println(" Inside the method is "+p);

}

public static void increase(double p) {
    p+=2;
    System.out.println(" Inside the method …
Run Code Online (Sandbox Code Playgroud)

java long-integer

0
推荐指数
1
解决办法
101
查看次数

C代码指数计算给出错误的结果

对于 int 值2,015,671,此代码输出475,739,751

long long cube(int n)
{
return n*n*n;
}
Run Code Online (Sandbox Code Playgroud)

虽然正确的值应该是8,189,529,329,933,957,120 但使用来自<math.h>pow(n, 3) 我得到了正确的结果。如果它是 long long 类型的溢出,那么为什么它适用于pow?并且它没有达到 long long 数据类型9,223,372,036,854,775,807的最大值。这种行为的解释是什么?

c long-integer

0
推荐指数
1
解决办法
57
查看次数

1L与(长)1的区别

一位同事在 PR 中添加了评论评论,我们应该使用1L而不是(long)1。我同事给的唯一解释是使用和阅读1L很方便。所以我的问题是除了可读性之外,1L 是否还有其他一些好处?

我的代码

void getUserId() {
    assert((long) 1, userService.getUserId())
}

userService.getUserId() returns long value i.e 1
assert() accepts two long object
Run Code Online (Sandbox Code Playgroud)

java casting literals long-integer

0
推荐指数
1
解决办法
1826
查看次数

C strtol 如何解释十六进制字符串?

我期望strtol("ffffffffffffffff", NULL, 16)return-1strtol("7fffffffffffffff", NULL, 16)return LONG_MAX,因为linux 手册页第一句话似乎暗示 strtol 返回signed long 。第二次调用确实返回了预期的结果。但是第一个调用返回了LONG_MAX!就像,输入的十六进制字符串甚至不相同。好像这还不够令人困惑,strtol("8000000000000000", NULL, 16)我期望返回的LONG_MIN,返回与前两个调用 相同的值LONG_MAX。对于前两次调用,我认为 strtol 忽略了输入字符串中的最高有效位,但第三次调用驳斥了这一假设。

这是某种奇怪的铸造情况还是我将数学现实与 C 现实混合在一起?

这是我的源代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[]) {
    long x = strtol(argv[1], NULL, 16);
    printf("%ld\n", x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在 Ubuntu 上进行编译gcc scratch.c,并通过将十六进制字符串作为命令行参数传递来获取结果。例如:

./a.out ffffffffffffffff // gives LONG_MAX
./a.out 8000000000000000 // gives LONG_MAX
./a.out 7fffffffffffffff // gives LONG_MAX
Run Code Online (Sandbox Code Playgroud)

c hex bit-manipulation long-integer

0
推荐指数
1
解决办法
1013
查看次数

当我输入值 200000 作为 long 变量的输入时,C 程序崩溃,为什么?

对于下面的简单代码,每当我输入值 200,000(或任何其他高值)时,程序就会崩溃:

    long size;
    printf("Enter the size of the array to be sorted: ");
    scanf("%ld",&size);
Run Code Online (Sandbox Code Playgroud)

有人能告诉我为什么吗?根据我的信息,long的范围远大于200,000

TIA

编辑:上一段代码后面是这些声明。

int arrMerge[size];
int arrQuick[size];
int arrSelect[size];
int arrInsert[size];
Run Code Online (Sandbox Code Playgroud)

当我评论除这些行(以及上面的行)之外的整个程序时,它已经崩溃了。给出了以下终止消息:

进程返回-1073741571(0xC00000FD)执行时间:2.419秒按任意键继续。

c long-integer

0
推荐指数
1
解决办法
145
查看次数

为什么将一个非常大的 long 数转换为 int 会给我们一个奇怪的输出(Java)?

我正在用 Java 练习一些转换,但我遇到了一种情况,在任何地方都找不到任何答案。有很多类似的问题和答案,但没有一个给我这个特殊案例的解释。

当我做类似的事情时

    long l = 165787121844687L;
    int i = (int) l;

    System.out.println("long: " + l);
    System.out.println("after casting to int: " + i);
Run Code Online (Sandbox Code Playgroud)

输出是

long: 165787121844687
after casting to int: 1384219087
Run Code Online (Sandbox Code Playgroud)

这个结果对我来说非常有趣。

我知道long类型是64位整数,int类型是32位整数。我还知道,当我们将较大的类型转换为较小的类型时,我们可能会丢失信息。我知道有一个Math.toIntExact()方法非常有用。

但是这个“ 1384219087 ”输出的解释是什么?数据丢失了,但为什么是这个数字呢?“ 165787121844687 ”怎么变成了“ 1384219087 ”?为什么代码甚至可以编译?

就是这样。谢谢!

java casting long-integer

0
推荐指数
1
解决办法
206
查看次数

如何将两个 25 位数字相加?

我正在尝试在 C 中添加大约 25 位数字。我得到的结果与预期的、可能的原因数据类型有点不同。

/* Online C Compiler and Editor */
#include <stdio.h>

int main()
{
    long double result;
    long double a;
    long double b;
    a = 51680708854858333333;
    b = 83621143489848333333,
    result = a + b;
    printf("Hello, World!\n");
    printf("can be written %.0Lf\n", result);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c types biginteger long-integer

0
推荐指数
1
解决办法
154
查看次数