Tag: int

将int作为float打印时printf的行为是什么?

我在windows7上使用dev cpp来编译我的代码。 int d = 0x12; char* e = (char*)&d; printf(“%d %d\n”, sizeof (int), sizeof (float)); printf(“%p %p\n”, &d, (float*)&d); printf(“%p %p %p %p %p\n”, &d, &e[0], &e[1], &e[2], &e[3]); printf(” %d | %x | %#1x | %#1x | %#1x |%p\n”, d, e[0], e[1], e[2], e[3], &e[0]); getchar(); 4 4 0028FF40 0028FF40 0028FF40 0028FF40 0028FF41 […]

C中的int总是32位吗?

这与以下问题有关, 如何在C中声明32位整数 在大多数平台上,有几个人提到int总是32位。 如果这是真的,我很好奇。 你知道任何具有不同大小的int的现代平台吗? 忽略具有8位或16位架构的恐龙平台。 注意: 我已经知道如何从另一个问题声明一个32位整数。 这个更像是一项调查,以找出哪些平台(CPU / OS /编译器)支持其他大小的整数。

C Unsigned int提供负值?

我有一个无符号整数,但是当我使用%d打印出来时,有时会出现负值吗?

比较两个相同长度的int数组的最佳方法是什么?

将int数组b和c与a进行比较的最佳方法是什么? int a[] = {0,1,0,0,1}; int b[] = {0,1,0,0,1}; int c[] = {1,1,0,0,1}; b和c只是示例,假设它们可以是0和1的任意组合。 我试图检测与a相同的数组。 我用谷歌搜索了一段时间,但没有找到满意的答案。 这是我意识到的初学者问题,谢谢你的耐心等待。

将unsigned int转换为signed int C.

我试图将65529从unsigned int转换为signed int 。 我尝试做这样的演员: unsigned int x = 65529; int y = (int) x; 但是当它应该返回-7时, y仍然返回65529。 这是为什么?

C中无符号和无符号int之间的区别

你能说清楚unsigned和unsigned int之间的区别吗? 也许一些示例代码会有所帮助。

确定C字符串是否是C中的有效int

我需要检查一个C字符串是否是一个有效的整数。 我试过了两个 int num=atoi(str); 和 int res=sscanf(str, “%d”, &num); 但是在两行中发送字符串”8 -9 10″只返回8,而没有指出该字符串的无效性。 有人可以建议替代方案吗?

如何确定宽度是“int”和“unsigned”两倍的整数类型?

中间乘法的值通常需要两倍的位数作为输入。 // Example int foo(int a, int b, int carry, int rem) { int2x c; // Some type that is twice as wide at `int` c = (int2x)a * b + carry; return (int) (c % rem); } 考虑到填充的可能性(似乎限制了sizeof()有用性)和非2的补码整数(限制了位误),…… 以下是否始终创建所需类型? 如果没有,如何编写至少一个合理的解决方案,即使不完全可移植? #include #include #if LONG_MAX/2/INT_MAX – 2 == INT_MAX typedef long int2x; typedef unsigned long […]

将char数组转换为C中的int数

我想转换一个char数组[],如: char myarray[4] = {‘-‘,’1′,’2′,’3′}; //where the – means it is negative 所以它应该是整数:-1234使用C中的 标准库。 我找不到任何优雅的方式来做到这一点。 我可以肯定附加’\ 0’。

C:将最小32位整数(-2147483648)转换为float给出正数(2147483648.0)

当我遇到一些我觉得奇怪的行为时,我正在研究一个嵌入式项目。 我设法在键盘上重现它(见下文)以确认,但我的机器上没有任何其他C编译器可以在它们上进行尝试。 场景:对于32位整数可以容纳的最负值,我有一个#define ,然后我尝试使用它来与浮点值进行比较,如下所示: #define INT32_MIN (-2147483648L) void main() { float myNumber = 0.0f; if(myNumber > INT32_MIN) { printf(“Everything is OK”); } else { printf(“The universe is broken!!”); } } 键盘链接: http : //codepad.org/cBneMZL5 对我来说,看起来这个代码应该可以正常工作,但令我惊讶的是它打印出The universe is broken!! 。 此代码隐式将INT32_MIN强制转换为float ,但事实certificate,这会导致浮点值为2147483648.0 (正!),即使浮点类型完全能够表示-2147483648.0 。 有没有人对这种行为的原因有任何见解? 代码解决方案 :正如Steve Jessop在他的回答中提到的, limits.h和stdint.h包含正确的(工作) int范围define s,所以我现在使用这些而不是我自己的#define 问题/解决方案解释摘要:鉴于答案和讨论,我认为这是对正在发生的事情的一个很好的总结(注意:仍然阅读答案/评论,因为它们提供了更详细的解释): 我使用的是32位long的C89编译器,因此任何大于LONG_MAX且小于或等于ULONG_MAX后跟L后缀的值都有一个unsigned long类型 (-2147483648L)实际上是一个一元-在unsigned long […]