Tag: 运算符

即使参数是函数调用,C是否也使用短路评估?

我知道逻辑运算符会进行短路检查。 也就是说,如果存在类似A && B && C的语句,那么如果A为假,则不评估B和C 但在B和C是函数调用的情况下,这也是如此吗? 例如,此代码中的return语句: bool areIdentical(struct node * root1, struct node *root2) { /* base cases */ if(root1 == NULL && root2 == NULL) return true; if(root1 == NULL || root2 == NULL) return false; /* Check if the data of both roots is same and data of left and right […]

在c / c ++中^ =是什么意思?

我有以下代码行: contents[pos++] ^= key[shift++]; 运算符^=是什么意思?

XOR交换算法中运算符的未定义行为?

void swap(int* a, int* b) { if (a != b) *a ^= *b ^= *a ^= *b; } 如上所述*a ^= *b ^= *a ^= *b只是*a = *a ^ (*b = *b ^ (*a = *a ^ *b))的快捷方式,可以(例如)第二个*a被评估(对于XOR)就在第三个*a被修改之前(由=)? 我是否用C99 / C11 / C ++ 98 / C ++ 11编写它是否重要?

常数的按位OR

在阅读这里的一些文档时,我发现了这个: unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; 我不知道这是如何工作的。 我读了C中的按位运算符,但我不明白你如何在一个int中包含三个(或更多!)常量,以后能够以某种方式从int中提取它们? 进一步深入了解文档,我也发现了这个,这可能是相关的: typedef enum { kCFCalendarUnitEra = (1 << 1), kCFCalendarUnitYear = (1 << 2), kCFCalendarUnitMonth = (1 << 3), kCFCalendarUnitDay = (1 << 4), kCFCalendarUnitHour = (1 << 5), kCFCalendarUnitMinute = (1 << 6), kCFCalendarUnitSecond = (1 << 7), kCFCalendarUnitWeek = (1 << 8), […]

为什么两种情况下的不同行为是第一 int i = 1,2,3; 和第二。 int i; i = 1,2,3;

使用GCC编译器,在C程序中跟随两个运算符的情况,观察不同的行为。 1。 int i = 1,2,3; printf(“%d”,i); // this will give compile time error 和, 2。 int i; i = 1,2,3; printf(“%d”,i); // Its output will be 1. 在第一种情况下,编译器给出了错误“错误:期望标识符或’(’数字常量之前’。并且在第二种情况下,没有错误,输出是1.在这两种情况下,任何人都能解释编译器行为吗?编译器如何?解释这两个陈述? 提前感谢您的意见。

处于相同“if”条件的两个“==”相等运算符未按预期工作

我试图建立三个相等变量的相等,但下面的代码不打印应该打印的明显正确的答案。 有人可以解释,编译器如何在内部解析给定的if(condition) ? #include int main() { int i = 123, j = 123, k = 123; if ( i == j == k) printf(“Equal\n”); else printf(“NOT Equal\n”); return 0; } 输出: manav@workstation:~$ gcc -Wall -pedantic calc.c calc.c: In function ‘main’: calc.c:5: warning: suggest parentheses around comparison in operand of ‘==’ manav@workstation:~$ ./a.out NOT Equal […]

C编程语言中&&的行为

我是C编程语言的初学者,最近我读过有关Logical AND &&运算符的内容。 我也知道,在C编程语言中,所有非零值都被视为TRUE 。 NON-ZERO && NON-ZERO = 1 NON-ZERO && ZERO = 0 ZERO && NON-ZERO = 0 ZERO && ZERO = 0 但是当我处理以下程序时,我没有得到预期的答案。 int main(){ int x, y, z; x = y = z = -1; y = ++x && ++y && ++z; printf(“x = %d, y = %d, z = %d, […]

取消引用和后缀的优先顺序

当我通过K&R阅读TCPL时,我无法理解两个表达式: *p++ = val; /*push val onto stack */ 这是我的想法: dereference和postfix具有相同的优先级,并且关联性是从右到左,所以 *p++ = val可能与*(p++) = val ,因为指针通常是顶部的下一个位置,所以在这段代码中,p因为括号而首先增加1,所以p是上面的两个单位当前顶部,但不是当前顶部之上的一个单位,其中val应该是!!! 谢谢

在C中,作为参数传递时,`&function`和`function`有什么区别?

例如: #include typedef void (* proto_1)(); typedef void proto_2(); void my_function(int j){ printf(“hello from function. I got %d.\n”,j); } void call_arg_1(proto_1 arg){ arg(5); } void call_arg_2(proto_2 arg){ arg(5); } void main(){ call_arg_1(&my_function); call_arg_1(my_function); call_arg_2(&my_function); call_arg_2(my_function); } 运行这个我得到以下内容: > tcc -run try.c hello from function. I got 5. hello from function. I got 5. hello from […]

post和pre-increment运算符的以下哪种组合在C中具有未定义的行为?

我读过,有没有人可以解释这些未定义的行为(i = i ++ + ++ i,i = i ++等…)并在浪费超过2小时的时间后尝试理解 “comp.lang.c常见问题解答”中的序列点时间试图通过gcc编译器解释以下结果。 expression(i=1;j=2) ijk k = i++ + j++; 2 3 3 k = i++ + ++j; 2 3 4 k = ++i + j++; 2 3 4 k = ++i + ++j; 2 3 5 k = i++ + i++; 3 2 k = i++ […]