Tag: long integer

从unsigned long int转换为signed int,反之亦然

我想将一个signed int传递给gsl_rng_uniform_int (const gsl_rng * r, unsigned long int n) 。 我传递的signed int大于或等于零。 该函数将返回一个介于0和n之间的数字,因此如果我传递一个正的signed int,它将返回一个在signed int范围内的数字。 然后我想将返回值存储在signed int中。 用明显的预期行为来做到这一点最简洁的方法是什么? 我在64位Linux机器上使用64位编译器。 更新抱歉,伙计们。 请忽略。 我的代码问题其实在其他地方。 我误解了gdb的输出。

UINT_MAX与C中的ULONG_MAX相同

在解决K&R C书中的练习时,我偶然发现了练习2.1。 起初我把UINT_MAX作为-1 ,但后来我使用了%u占位符,但现在它给了我与ULONG_MAX相同的数字。 在附录B的书中,他们说UINT_MAX应该是65535而ULONG_MAX应该是4294967295 ,但是在运行练习时,它给我的UINT_MAX和ULONG_MAX都是4294967295 。 这是为什么?

从32位系统上的结构读取一个long(C)

在C中,我有一个带有成员“frequency”的结构,这是一个长的unsigned int。 此代码运行的硬件是32位。 struct在实例化时设置其值。 struct config_list configuration = { … .frequency = (long unsigned int)5250000000u, … } 在我的代码中,我通过指针将这个结构传递给子程序。 在这个子程序中,我似乎无法获得正确的值,所以要检查,我输入: printf(“Config frequency: %lu\n”, ptr->frequency); printf(“Derefernced: %lu\n”, (*ptr).frequency); 因为这两种方式我认为你可以从指针访问结构数据。 但是,在这两种情况下,我看到的输出是955,032,704。 我认为这只是我设置的频率的前32位。 我的问题是,为什么我的long unsigned int被削减到32位? 是不是“长”应该将范围扩展到64位?

c – 嵌入式系统中的Long Long到char转换function

我正在使用嵌入式系统,我需要实现一种方法来将long long转换为char。 问题是我不能在这个系统中使用sprintf来做到这一点,所以我正在寻找替代方法/function来实现这一点。 欢迎实施LongLongToCharfunction的建议。

printf转换麻烦很久

我一直在研究项目的euler问题,它本质上强迫你使用大存储的数据类型。 #include #include #define num 600851475143 int main() { long long i, j, count=0, number=num, k; for(i=2;number!=1;i++) { count=0; for(j=1;j<=i;j++) { if((i%j)==0) { count++; } } for(k=0;k<100000000;k++) {} if(count==2) { printf(" %d\n", i); if(number%i==0) { number/=i; printf(" %d\n", number); printf("%d\n", i); i=2; } } } getch(); return 0; } 当我编译并运行程序时,没有打印数字。 我尝试了各种printf转换%ll,%l,我已经更改了数据类型。 我正在使用GNU GCC编译器。 我该怎么办?

存储(和打印)整数的最大数据类型是什么?

在32位系统的C中,哪种数据类型将存储(并因此可以打印)最大的整数? 是long long还是unsigned long ? 有没有unsigned long long ? 哪个是最精确和政治正确的?

为什么sizeof(int)== sizeof(long)?

在下面列出的程序中,sizeof(int)和sizeof(long)在我的机器上是相等的(都等于4个字节(或32位))。 据我所知,很长一段是8个字节。 它是否正确? 我有一台64位机器 #include #include int main(void){ printf(“sizeof(short) = %d\n”, (int)sizeof(short)); printf(“sizeof(int) = %d\n”, (int)sizeof(int)); printf(“sizeof(long) = %d\n”, (int)sizeof(long)); printf(“sizeof(float) = %d\n”, (int)sizeof(float)); printf(“sizeof(double) = %d\n”, (int)sizeof(double)); printf(“sizeof(long double) = %d\n”, (int)sizeof(long double)); return 0; }

C99的固定宽度整数类型

在这里没有得到我的问题的详细答案。 我想我会从另一个角度解决它。 有人能够解释用于确定C99固定宽度整数类型的基础类型的选择标准: [u]int_fast[n]_t [u]int_least[n]_t [u]int[n]_t 对于给定的处理器,如果’long’和’int’的大小相同(sizeof(int)== sizeof(long)),那么为什么’long’会在’int’上使用,反之亦然。

long和int的历史背景通常是相同的大小?

根据这里的众多答案 , long和int在C和C ++(Windows和Linux,32和64位)的通用平台上都是32位大小(我知道没有标准,但实际上,这些都是观察到的尺寸。) 所以我的问题是,这是怎么发生的? 为什么我们有两种尺寸相同的类型? 我以前总是假设大部分时间都是64位,而且是32位。我不是说“应该”是这样或那样的,我只是好奇我们是如何到达这里的。

将int转换为指针 – 为什么要先转换为long? (如在p =(void *)42;)

在GLib文档中,有一章关于类型转换宏。 在关于将int转换为*void指针的讨论中,它说(强调我的): 天真的,你可以试试这个,但这是不正确的: gpointer p; int i; p = (void*) 42; i = (int) p; 同样,该示例不正确,请勿复制。 问题是在某些系统上你需要这样做: gpointer p; int i; p = (void*) (long) 42; i = (int) (long) p; (来源:GLib参考手册GLib 2.39.92,章节类型转换宏 )。 为什么long必要? 是否任何需要扩展的int不会自动作为指针转换的一部分发生?