我试过执行以下程序:
#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是相同的!
一个键盘连接.
请参阅此代码段
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)作为差异?
请考虑以下代码:
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提升到unsigned(-1)那时是真的吗unsigned(-1) > sizeof(int)?-1 > sizeof(int)相当于-1 > size_t(4)如果的sizeof(int)的是4,如果是这样的话,为什么-1 > size_t(4)是假的?这个C++标准是否合适?
unsigned long mynum = 7;
if(mynum > -1) // false
Run Code Online (Sandbox Code Playgroud)
为什么会这样?是因为-1是一个int,当它被"提升"为unsigned long时,它得到unsigned long的最大值?
此 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) #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.
在下面的代码中sizeof(int)会产生signed int与4个字节的值(假设在一个特定的编译器)和-1也signed int,则我的答案应该是,但它显示没有.
#include <stdio.h>
int main()
{
if (sizeof(int) > -1)
printf("Yes");
else
printf("No");
return 0;
}
Run Code Online (Sandbox Code Playgroud)