请参阅此代码段
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++标准是否合适?
我遇到了这个问题.
#include <stdio.h>
int main(void) {
// your code goes here
unsigned int i = 23;
signed char c = -23;
if (i > c)
printf("yes");
else
printf("no");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么这段代码的输出是no.
当C int和charC 之间进行比较时,有人可以帮助我理解比较运算符的工作原理吗?
可能重复:
对C宏扩展和整数运算感到困惑
一个谜语(在C中)
以下C程序的输出是打印数组中的元素.但是当实际运行时,它不会这样做.
#include<stdio.h>
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23,34,12,17,204,99,16};
int main()
{
int d;
for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
printf("%d\n",array[d+1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是为什么?
其实我(可能)是一个"简单"的问题.所以我不知道如何将有符号整数转换为无符号整数.
我的代码:
signed int entry = 0;
printf("Decimal Number : ");
scanf("%d", &entry);
unsigned int uEntry= (unsigned int) entry;
printf("Unsigned : %d\n", uEntry);
Run Code Online (Sandbox Code Playgroud)
如果我将无符号值发送到控制台(参见我的上一个代码行),我总是得到一个有符号整数.
你能帮助我吗?
非常感谢!
亲切的问候,亲
当我尝试输入这个while语句时,我有一个奇怪的行为:
unsigned u = 0;
int i = -2;
while(i < u)
{
// Do something
i++;
}
Run Code Online (Sandbox Code Playgroud)
但它从来没有进入,即使当我设置一个断点i = -2和u = 0.我究竟做错了什么?我怎么能解决这个问题?