相关疑难解决方法(0)

为什么这个if条件失败用于比较负整数和正整数

#include <stdio.h>

int arr[] = {1,2,3,4,5,6,7,8};
#define SIZE (sizeof(arr)/sizeof(int))

int main()
{
        printf("SIZE = %d\n", SIZE);
        if ((-1) < SIZE)
                printf("less");
        else
                printf("more");
}
Run Code Online (Sandbox Code Playgroud)

编译后的输出gcc"more".为什么if条件,即使失败-1 < 8

c c++ comparison signed if-statement

7
推荐指数
4
解决办法
6381
查看次数

C中的数据类型提升或降级

以下哪项是数据类型升级和降级:

char ch = 'C';
int i = 65;
float fl = 2.2;

ch = ch + 1;
i = fl + 2 * ch;
fl = 2.0 * ch + i;
ch = 5212205.17;
Run Code Online (Sandbox Code Playgroud)

如果我说的话我是否正确

促销:

  • i = fl + 2 * ch;

  • fl = 2 * ch + i;

降级:

  ch = 5211205.17;
Run Code Online (Sandbox Code Playgroud)

不知道

  ch = ch + 1;
Run Code Online (Sandbox Code Playgroud)

也降级..请帮忙:)

c types

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

C中的整数提升示例

void foo(void) {
    unsigned int a = 6;
    int b = -20;

    if (a+b > a) {
        printf("> a");
    } else {
        printf("< a");
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图了解上面的整数提升示例发生了什么.我知道,a = 6b = -20输出应该是> a由于b被晋升为unsigned int.但是,< a如果我分配输出b = -5.在这种情况下输出也不应该是相同的,因为值b = -5也被提升为unsigned int

c integer-promotion

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

size_t除以int类型转换规则

当我使用size_t类型(或无符号长整数)进行算术运算时,我应该多么小心地使用类型文字来装饰整数常量.例如,

size_t a = 1111111;
if (a/2 > 0) ...;
Run Code Online (Sandbox Code Playgroud)

当编译器进行除法时会发生什么?它将2视为整数还是无符号整数?如果是前者,那么(unsigned int)/(int)的结果类型是什么?

我应该经常小心地写'你'文字

if (a/2u > 0) ...;
for (a=amax; a >= 0u; a -= 3u) ...;
Run Code Online (Sandbox Code Playgroud)

或编译器会正确猜测我想使用无符号整数运算?

c c++ type-conversion literals

3
推荐指数
2
解决办法
3083
查看次数

C按位移位:右操作数考虑用于隐式类型转换?

gcc 4.8.4警告1u << 63ul?(假设64位long和32位int)并计算0.这是正确的(没有晋升1u1ul转移之前)?

ISO/IEC 9899:201x,6.3.1.8(通常的算术转换):"许多期望算术类型的操作数引起转换的运算符"; 6.5.7(按位移位运算符):"对每个操作数执行整数提升......".

但我无法得出结论.哪些是"很多运营商"?据我所知,"整数提升"不属于宽泛的类型int(我是否正确?),但标准没有明确声明对于隐式类型转换不考虑按位移位的右操作数.

c bit-shift implicit-conversion

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

如果除以1,隐式类型转换是否会发生?

#include <stdio.h>

int main()

{
    unsigned int count=1;

    signed int val = -20;

    signed int div=(val/count);

    signed int div1=(val/(signed int)count);

    printf("div %d div1 %d \n",div,div1);
    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

输出:

div -20 div1 -20
Run Code Online (Sandbox Code Playgroud)

但如果count = 5则输出:

div 858993455 div1 -4 
Run Code Online (Sandbox Code Playgroud)

在count = 5的情况下,signed int被隐式转换为unsigned int,为什么不为count = 1

c c++

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

为什么(sizeof(int)> -1)为false?

你可以证明以下代码:

#include<stdio.h>
int main()
{
    if(sizeof(int) > -1)
    {
            printf("\nTrue\n");
    }
    else
    {
            printf("\nFALSE\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是FALSE.....建议我的原因

c sizeof

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

c中的整数提升

假设我有一台 32 位机器。

我知道在整数提升期间,表达式被转换为:\

  • int 如果原始类型的所有值都可以用 int 表示
  • unsigned 除此以外

你能解释一下下面的表达式会发生什么吗?总的来说,这里的排名是如何工作的?

第一个片段:

si16  x, pt;
si32  speed;
u16 length;
x = (speed*pt)/length;
Run Code Online (Sandbox Code Playgroud)

第二个:

x = pt + length;
Run Code Online (Sandbox Code Playgroud)

编辑:

si16均值signed short(大小 16 位)、si32位均值signed int(大小 32 位)和u16均值unsigned short(大小 16)

我发现以下链接非常清楚地描述了这个问题: 隐式类型转换

具体看Lundin的回答,很有帮助!

c integer-overflow integer-promotion

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