我已经看到这种模式在C&C++中使用了很多.
unsigned int flags = -1; // all bits are true
Run Code Online (Sandbox Code Playgroud)
这是一个很好的便携式方法吗?或正在使用0xffffffff或~0更好?
我试图将unsigned int与这样的signed char进行比较:
int main(){
unsigned int x = 9;
signed char y = -1;
x < y ? printf("s") : printf("g");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我期待o/p为"g".相反,它的"s".这里进行了什么样的转换?
考虑这个C代码:
#include "stdio.h"
int main(void) {
int count = 5;
unsigned int i;
for (i = count; i > -1; i--) {
printf("%d\n", i);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的观察/问题:循环永远不会被执行.但是,如果我将i的数据类型从unsigned int更改为int,则一切都按预期工作.
我一直在考虑使用无符号整数作为当你试图从它们中减去时"环绕"的值.因此,当i为零并且我减去1时,它将回绕到UINT_MAX.而且由于它的价值永远不会消极,这实际上是一个无限循环.(当我将比较从i> -1更改为i> = 0时,这正是发生的情况.)
在我的逻辑中某处有一个错误,因为如果我是无符号的,循环永远不会执行,我将它与-1进行比较.编译器要么以某种方式优化它,要么运行时值的行为与我期望的不同.
为什么循环不能运行?
此 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代码:为什么输出"False"?????
为什么4> -1 ???
代码:
#include <stdio.h>
int main() {
if (sizeof(int) > -1)
printf("True");
else
printf("False");
return 0;
}
Run Code Online (Sandbox Code Playgroud) 你可以证明以下代码:
#include<stdio.h>
int main()
{
if(sizeof(int) > -1)
{
printf("\nTrue\n");
}
else
{
printf("\nFALSE\n");
}
}
Run Code Online (Sandbox Code Playgroud)
输出是FALSE.....建议我的原因
#include <iostream>
using namespace std;
int main()
{
if(sizeof(int)> -1)
cout<<"ok";
else
cout<<"not ok";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
int的大小不是应该是4吗,它应该大于-1。
在以下代码中
#include <stdio.h>
int main()
{
if (sizeof(int) > -1)
printf("True");
else
printf("False");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到输出为"False"而不是"True".我的理解是sizeof运算符只返回int的大小,在这种情况下为4.
为什么评估条件为假?
c ×7
sizeof ×4
c++ ×3
binary ×1
bit-fields ×1
char ×1
comparison ×1
gcc ×1
optimization ×1
unsigned ×1