相关疑难解决方法(0)

类型转换 - unsigned to signed int/char

我试过执行以下程序:

#include <stdio.h>

int main() {
    signed char a = -5;
    unsigned char b = -5;
    int c = -5;
    unsigned int d = -5;

    if (a == b)
        printf("\r\n char is SAME!!!");
    else
        printf("\r\n char is DIFF!!!");

    if (c == d)
        printf("\r\n int is SAME!!!");
    else
        printf("\r\n int is DIFF!!!");

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

对于这个程序,我得到输出:

char是DIFF !!! int是相同的!

为什么我们两者都有不同的输出?
输出应该如下?

char是相同的!int是相同的!

一个键盘连接.

c types type-conversion integer-promotion signedness

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

无符号和有符号整数的比较运算

请参阅此代码段

int main()
{ 
 unsigned int a = 1000;
 int b = -1;
 if (a>b) printf("A is BIG! %d\n", a-b);
 else printf("a is SMALL! %d\n", a-b); 
 return 0;
}   
Run Code Online (Sandbox Code Playgroud)

这给出了输出:a是SMALL:1001

我不明白这里发生了什么.>运算符如何在这里工作?为什么"a"小于"b"?如果它确实更小,为什么我得到一个正数(1001)作为差异?

c unsigned signed gcc

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

为什么?1> sizeof(int)?

请考虑以下代码:

template<bool> class StaticAssert;
template<> class StaticAssert<true> {};
StaticAssert< (-1 < sizeof(int)) > xyz1; // Compile error
StaticAssert< (-1 > sizeof(int)) > xyz2; // OK
Run Code Online (Sandbox Code Playgroud)

为什么是-1 > sizeof(int)真的?

  1. -1提升到unsigned(-1)那时是真的吗unsigned(-1) > sizeof(int)
  2. 这是真的,-1 > sizeof(int)相当于-1 > size_t(4)如果的sizeof(int)的是4,如果是这样的话,为什么-1 > size_t(4)是假的?

这个C++标准是否合适?

c++ unsigned sizeof type-conversion modular

17
推荐指数
2
解决办法
1990
查看次数

为什么比较unsigned long和negative number会导致false?

unsigned long mynum = 7;

if(mynum > -1) // false
Run Code Online (Sandbox Code Playgroud)

为什么会这样?是因为-1是一个int,当它被"提升"为unsigned long时,它得到unsigned long的最大值?

c++ c++11

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

这段代码的“假”输出背后的原因是什么?

此 C 代码给出输出“False”并且else块正在执行。

的值为sizeof(int)4,但 的值为sizeof(int) > -10。

我不明白发生了什么。

#include <stdio.h>
void main()
{
    if (sizeof(int) > -1 )
    {
       printf("True");
    }
    else
    {
        printf("False");
    }
    printf("\n%d", (sizeof(int)) ); //output: 4
    printf("\n%d", (sizeof(int) > -1) ); //output: 0
}
Run Code Online (Sandbox Code Playgroud)

c comparison unsigned gcc sizeof

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

我的电脑认为signed int小于-1?

#include <stdio.h>
int main(void)
{
    printf("%d", sizeof(signed int) > -1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果为0(FALSE).怎么会这样?我使用64位ubuntu linux,所以结果应该是(4> -1)=> 1 => True.

c unix linux casting

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

为什么应该在此代码中引入类型促销?

在下面的代码中sizeof(int)会产生signed int与4个字节的值(假设在一个特定的编译器)和-1signed int,则我的答案应该,但它显示没有.

#include <stdio.h>
int main()
{
    if (sizeof(int) > -1)
        printf("Yes");
    else
        printf("No");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c

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