标签: relational-operators

<快于<=?

我正在读一本书,作者说这if( a < 901 )比书更快if( a <= 900 ).

与此简单示例不完全相同,但循环复杂代码略有性能变化.我想这必须对生成的机器代码做一些事情,以防它甚至是真的.

c++ performance assembly relational-operators

1508
推荐指数
12
解决办法
12万
查看次数

直接将左移操作的结果分配给变量和C中的左移分配操作有什么区别?

在下面的表达式中,左移操作的结果被赋值给变量i.

int i;
i = 7 << 32;
printf("i = %d\n",i);
Run Code Online (Sandbox Code Playgroud)

在下面的表达式中,执行左移位分配操作.

int x = 7;
x <<= 32;
printf("x = %d\n",x);
Run Code Online (Sandbox Code Playgroud)

上述两种表达都给出了不同的结果.但是以下两个表达式并不相同.两者都给出了相同的结果.那么上述表达式返回不同值的原因是什么呢?

int a;
a = 1 + 1;
printf("a = %d\n",a);

int b = 1;
b += 1;
printf("b = %d\n",b);
Run Code Online (Sandbox Code Playgroud)

c bit-shift relational-operators

18
推荐指数
2
解决办法
1592
查看次数

如何比较 const char* 字符串?

首先,考虑这个例子:

#include <iostream>
using namespace std;

int main()
{
    cout << ("123" == "123");
}
Run Code Online (Sandbox Code Playgroud)

我期望什么:由于“123”是一个const char*,我期望对这些字符串的地址(如这些答案之一所述)进行比较。

...因为!===只会比较这些字符串的基地址。不是字符串本身的内容。

但输出仍然是1. 好吧,我们实际上不知道如何比较两个纯右值对象的地址(或者至少我不明白它是如何完成的)。因此,让我们将这些字符串声明为变量,看看会发生什么:

#include <iostream>
using namespace std;

int main()
{
    const char* a = "1230";
    const char* b = "1230";
    cout << (a == b);
}
Run Code Online (Sandbox Code Playgroud)

输出仍然是1. 那么const char*琴弦不会衰减吗?或者编译器设法进行一些优化并仅为一个字符串分配内存?好吧,让我们尝试避免它们:

#include <iostream>
using namespace std;

int main()
{
    const char* a = "1230";
    const char* b = "1231";
    b …
Run Code Online (Sandbox Code Playgroud)

c++ pointers string-literals relational-operators

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

c:这条线做什么?

我读了一些代码并且遇到了这个相当神秘的语法:

size_t count = 1;
char *s         = "hello you";
char *last_word = "there";

count += last_word < (s + strlen(s) - 1); #line of interest
Run Code Online (Sandbox Code Playgroud)

不知何故,计数增加了.但我认为<运算符会返回true或false.这条线做什么?

c addition operator-precedence compound-assignment relational-operators

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

是否定义了添加逻辑运算结果的行为

是否可以(定义行为)来添加逻辑运算的结果(因为它们应该是0或者1)?

如果我想计算大于零的数字,我可以这样做吗?(或者有更好的方法吗?)

int a[3] = {1,-5,3};
int result  = 0;
for( int i = 0 ; i<3; i++)
{
    result += a[i]>0;
}
Run Code Online (Sandbox Code Playgroud)

c relational-operators

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

C程序中的意外输出

我运行以下C程序

#include <stdio.h>

int main() {
    int x = 5, y = 6, z = 3, i;
    i = y > x > z;
    printf("%d\n", i);
}
Run Code Online (Sandbox Code Playgroud)

并获得输出0.再次,当我跑

 #include <stdio.h>

 int main() {
     int x = 5, y = 6, z = 3, i;
     i = y > x && x > z;
     printf("%d\n", i);
 }
Run Code Online (Sandbox Code Playgroud)

我输出为1.任何人都可以解释这背后的逻辑吗?

c relational-operators

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

零大于或等于零的计算结果为false

i = 0;
if(0 <= i <= 0) 
Run Code Online (Sandbox Code Playgroud)

这返回false.

我根本不明白这一点.监视窗口我也尝试在(0 <= i && i <= 0)单独测试时将语句读取,0 <= i返回false,同时i <= 0返回true.他们俩都应该是真的.我不确定这是否是一个精确的东西,但我不这么认为,因为我很难对这些值进行编码.请帮助我理解这个基本问题.

如果它有助于我试图通过获得交叉点然后检查它是否在x和y起点和终点之间来评估点是否在一条线上.当我试图检查x或y是否在其轴上时,这就成了一个问题,那么你就会遇到检查0是否介于0和0之间的问题.这就是它会落在线上.

c relational-operators

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

关系运算符==在C中如何工作?

我认为关系运算符==当要检查的语句为false时返回0,而在为true时返回1。但是,这不是我在一段代码中得到的输出。谁能解释一下?

我曾尝试在互联网上查找此内容,但到处都可以找到我所知道的相同解释。

int main()
{
    int x=35;

    printf("\n%d %d %d",x==35,x=50,x>40);

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

我期望输出为:1 50 1但显示的输出为:0 50 0

c relational-operators

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

在使用 C++ 赋值时理解运算符“更少”或“更大”

我使用了大于和小于符号,它给出了输出!它是如何工作的?

int x = 2;
x >= 3;
cout << x;  // output is 2
Run Code Online (Sandbox Code Playgroud)

而且输出也是不同的

int x = 2;
x = x > 3;
cout << x;   // output is zero !! HOW ??
Run Code Online (Sandbox Code Playgroud)

c++ bitwise-operators assignment-operator comparison-operators relational-operators

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

OR和少于运算符不能用作预期的C语言

我正在练习一本名为C语言编程的书,尝试解决练习7.9,所以我的代码完美运行,直到我为函数添加一个条件语句,只接受大于0的变量

我试过在很多方面改变它,但似乎没有任何效果

// Program to find the least common multiple
#include <stdio.h>

int main(void)
{
 int lcm(int u, int v);

 printf("the least common multiple of 15 and 30 is: %i\n", lcm(15, 30));

 return 0;
 }
// Least common multiple
int lcm(int u, int v)
{
 int gcd(int u, int v);

 int result;

 if (v || u <= 0)
 {
    printf("Error the values of u and v must be greater than 0");
    return 0;
 }

 result = (u * v) / …
Run Code Online (Sandbox Code Playgroud)

c logical-operators relational-operators

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