相关疑难解决方法(0)

十六进制格式的无符号长整型打印

我想打印出unsigned long long这样的:

  printf("Hex add is: 0x%ux ", hexAdd);
Run Code Online (Sandbox Code Playgroud)

但我得到了类型转换错误,因为我有一个unsigned long long.

c printf integer

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

sprintf for unsigned _int64

我有以下代码.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 c++ format-specifiers uint64 long-long

19
推荐指数
3
解决办法
4万
查看次数

如何在GCC 4.4.1中打印64位整数?

我正在使用Code :: Blocks with GCC 4.4.1,我似乎无法从我的C代码中打印64位有符号整数.

这段代码:

long long longint;

longint = 0x1BCDEFABCDEFCDEF; /* 2003520930423229935 */
printf("Sizeof: %d-bit\n", sizeof(longint) * 8);     /* Correct */
printf("%llx\n", longint);                           /* Incorrect */
printf("%x%x\n", *(((int*)(&longint))+1), longint);  /* Correct */
printf("%lld\n", longint);                           /* Incorrect */ 
Run Code Online (Sandbox Code Playgroud)

产生输出:

Sizeof: 64-bit
cdefcdef
1bcdefabcdefcdef
-839922193
Run Code Online (Sandbox Code Playgroud)

64位算术似乎正常工作:

longint -= 0x1000000000000000;
printf("%x%x\n", *(((int*)(&longint))+1), longint);
Run Code Online (Sandbox Code Playgroud)

得到:

bcdefabcdefcdef
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

c gcc codeblocks

13
推荐指数
3
解决办法
4万
查看次数

打印unsigned long long int值类型返回奇怪的结果

我在使用printf函数打印类型值时遇到问题unsigned long long int

我不知道出了什么问题.我在Windows 7 Professional 64位上使用Dev-Cpp 4.9.9.2和Visual Studio 2010 Professional(我知道它不是C编译器,但无论如何,想要尝试).为了显示,我使用了%llu修饰符(根据你如何printf一个unsigned long long int(unsigned long long int的格式说明符)?)但是我也尝试了I64d没有效果......


首先,我只是想打印的最小值和最大值unsigned long long int(使用ULONG_MAX来自limits.h)

printf("unsigned long long int: \n%llu to %llu \n\n", 0, ULONG_MAX);
Run Code Online (Sandbox Code Playgroud)

返回:

unsigned long long int:18446744069414584320 to 1580552164021 (Dev-Cpp)

unsigned long long int:18446744069414584320 to 0 (Visual Studio)


然后我尝试使用printf打印两个零

printf("unsigned long long int: \n%llu to %llu \n\n", 0, 0);
Run Code Online (Sandbox Code Playgroud)

返回:

unsigned long long int:0到1580552164021 (Dev-Cpp) …

c syntax printf unsigned-long-long-int

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

奇怪的"unsigned long long int"行为

可能重复:
你如何printf unsigned long long int?

#include <cstdio>

int main ()
{
    unsigned long long int n;
    scanf("%llu",&n);
    printf("n: %llu\n",n);
    n /= 3;
    printf("n/3: %llu\n",n);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

无论我输入什么,我都会得到非常奇怪的输出,例如:

n: 1
n/3: 2863311531
Run Code Online (Sandbox Code Playgroud)

要么

n: 2
n/3: 2863311531
Run Code Online (Sandbox Code Playgroud)

要么

n: 1000
n/3: 2863311864
Run Code Online (Sandbox Code Playgroud)

什么原因?我该怎么做才能正确?

(g ++ 3.4.2,Win XP)

c c++

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

C中的帕斯卡三角形

我是一名计算机工程专业的学生,​​下学期我将开始 C 课程。因此,为了让自己做好准备,我开始自学 C 并偶然发现了一项有趣的任务,该任务旨在让我乍一看似乎不是一个非常高级的水平。

任务是编写一个程序来计算Pascal's Triangle 中给定位置的值。计算它的公式写为element = row! /(位置!*(行 - 位置)!)

我已经编写了一个简单的控制台程序,它似乎可以正常工作,直到我开始使用大量数字对其进行测试。

当用第 16 行和位置 3 尝试这个程序时,它计算出的值为 0,虽然很明显不可能有这样的值(实际上它应该计算值为 560),但这个三角形的所有单元格都应该是整数并且大于一。

我想我在存储和处理大数时遇到了问题。阶乘函数似乎可以正常工作,并且我使用的公式可以正常工作,直到我开始尝试大数字

到目前为止,这里找到了最好的解决方案 -如何打印一个 unsigned long long int(unsigned long long int 的格式说明符)? 使用类型为 uint64_t 的 inttypes.h 库,但它仍然没有给我我需要的结果。

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

void clear_input(void);
uint64_t factorial(int x);

int main()
{
    // Printing
    printf("This program computes the value of a given position in Pascal's Triangle.\n");
    printf("You will be asked for row and …
Run Code Online (Sandbox Code Playgroud)

c largenumber pascals-triangle

3
推荐指数
1
解决办法
1776
查看次数

无符号长龙 - 奇怪的输出

好的,我正在尝试打印相对较大的十进制/十六进制版本,unsigned long long我得到的结果很奇怪......

代码 :

unsigned long long a = 1llu<<63;

printf("decimal = %llu\n",a);
printf("hexadecimal = %llx\n",a);
Run Code Online (Sandbox Code Playgroud)

输出 :

decimal = 9223372036854775808
hexadecimal = 8000000000000000
Run Code Online (Sandbox Code Playgroud)

现在,这是什么:

  • 十六进制输出正确的.
  • 十进制输出不是(应该是9223372036854780000)

为什么会这样?我究竟做错了什么???

c c++ macos gcc g++

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

大数序列之和

#include <stdio.h>

int main() {
    unsigned long int sum = 0LL;
    long i;
    for (i = 0LL; i < 100000000; i++) {
        sum = sum + i;
    }
    printf("%i", sum);
}
Run Code Online (Sandbox Code Playgroud)

这就是我的全部代码,我很好奇为什么它打印 887459712 而不是 4999999950000000,以及如何解决这个问题

c

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

printf("%u \n",4294967296)在ubuntu服务器11.10上为i386输出0并显示警告

在ubuntu服务器11.10 for i386上,sizeof(int)是4,所以我猜4294967296是int类型的最大数量,不是吗?但是printf("%u\n",4294967296)输出0并带有警告:

警告:格式'%u'需要'unsigned int'类型的参数,但参数2的类型为'long long unsigned int'[ - Wformat]

有什么建议吗?

gcc的版本是(Ubuntu/Linaro 4.6.1-9ubuntu3)4.6.1

c ubuntu gcc

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

C 中的 64 位整数声明

我试图用 unsigned long long 数据类型在 C 中声明 64 位变量,但它不起作用并且行为类似于 uint32 位变量。访问/检查 32 以上位的解决方案是什么?

#include <stdio.h>
#include <stdint.h>

int main() {
    // Write C code here
    printf("Hello world");
    unsigned long long temp = 0x1234567890123456ULL;
    unsigned long long temp2 = temp >> 1;
    
    uint64_t var = 0x1234567890123456; 
    
    printf("\n%x", (long long) temp); 
    printf("\n%x", (long long) temp2); 
    printf("\n%x", 1ULL << 31ULL);
    printf("\n%x", 1ULL << 32ULL);
    
    printf("\n%x", var); 
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

你好,世界

90123456

48091a2b

80000000

0

90123456

c types

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