我正在读一本书,作者说这if( a < 901 )比书更快if( a <= 900 ).
与此简单示例不完全相同,但循环复杂代码略有性能变化.我想这必须对生成的机器代码做一些事情,以防它甚至是真的.
在下面的表达式中,左移操作的结果被赋值给变量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) 首先,考虑这个例子:
#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) 我读了一些代码并且遇到了这个相当神秘的语法:
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
是否可以(定义行为)来添加逻辑运算的结果(因为它们应该是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程序
#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.任何人都可以解释这背后的逻辑吗?
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之间的问题.这就是它会落在线上.
我认为关系运算符==当要检查的语句为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
我使用了大于和小于符号,它给出了输出!它是如何工作的?
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
我正在练习一本名为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)