Tag: 逻辑运算符

试图在C中制作一个随机的“密码生成器”

#include #include #include int main() int counter = 0; srandom(time(NULL)); // Correct seeding function for random() char randChar; int passwordLength; printf(“Give password length \n”); scanf(“%d”, &passwordLength); while (counter < passwordLength) { randChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"[random() % 62]; printf("Your password is: %c", randChar); counter++; } if (passwordLength 25) { printf(“Your password must be from 5 to 25!!”); […]

该函数输出的说明

我正在做复习问题,问我“以下是什么输出”,而我在理解这个function方面遇到了一些麻烦: int a = 1, b = 1, c = -1; c = –a && b++; printf(“%d %d %d”, a, b, c); 输出是010.我的问题是关于第2行, c = –a && b++ 。 如何处理此行,以及它如何工作/更改值? 如果它是c = –a || b++ c = –a || b++ ? 从我的理解,我认为输出将是020。

编译器如何评估C中的条件

我有一个关于编译器如何评估c中“AND”条件的问题。 说,我写一个声明就像 if( (today is Thursday) && (Month is July) ) { //do something } 假设今天不是星期四,但月份确实是七月。 编译器是否检查两个条件,并执行1&0 == 0? 或者,一旦它看到今天不是星期四,它就会跳出来,甚至懒得查看月份状况,因为它无关紧要。 我正在使用以下gcc Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v –with-pkgversion=’Ubuntu/Linaro 4.6.3-1ubuntu5′ –with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs –enable-languages=c,c++,fortran,objc,obj-c++ –prefix=/usr –program-suffix=-4.6 –enable-shared –enable-linker-build-id –with-system-zlib –libexecdir=/usr/lib –without-included-gettext –enable-threads=posix –with-gxx-include-dir=/usr/include/c++/4.6 –libdir=/usr/lib –enable-nls –with-sysroot=/ –enable-clocale=gnu –enable-libstdcxx-debug –enable-libstdcxx-time=yes –enable-gnu-unique-object –enable-plugin –enable-objc-gc –disable-werror […]

如何在C中写“如果x等于5或4或78或……”

我有一个关于在if语句中使用逻辑运算符的快速问题。 目前我有一个if语句检查x是否等于5或4或78: if ((x == 5) || (x == 4) || (x == 78)) { blah } 我想知道我是否可以将所有内容浓缩为: if (x == 5 || 4 || 78) { blah } 对不起这个基本问题,我刚开始学习C.

C 中逻辑运算符的优先级

可能重复: 为什么“++ x || ++ y && ++ z“计算”++ x“首先? 但是,运算符“&&”高于“||” 如果你看一下C的优先级表,你会发现&&的优先级高于||。 但请看下面的代码: a=b=c=1; ++a || ++b && ++c; printf(“%d %d %d\n”,a,b,c); 它打印出“2 1 1”,这意味着首先评估“++ a”,一旦程序看到TRUE,它就会停在那里,因为在||的另一边是什么 并不重要。 但由于&&的优先级高于||,所以不应首先评估“++ b && ++ c”,然后将结果插回“++ a || result”? (在这种情况下,程序将打印“1 2 2”)。

为什么使用关系运算符的语句在以下代码中求值为1?

我的值不应该是0吗? 从x开始 #include int main(void) { int x = 10,y=20,z=5,i; i=x<y<z; printf("%d",i); return 0; }

将字符与C中的多个字符进行比较

如何比较C中的字符与其他字符,而不使用’if’和吨’||’? 例如,假设我有一个名为’i’的字符,我想要与其他8个字符进行比较,这些字符之间没有任何关联,如果’i’等于这8个字符中的至少一个,则表达式为真。 像这样的东西: if(i == c1 || i == c2 || i == c2 ……..){ /* do stuff */} 但是在一个大的应用程序中,这些比较很多,而不仅仅是3或8.有没有一种聪明而快速的方法来实现这样的东西,而不是最终看起来丑陋的代码? 先感谢您。

如果测试,测试相同的多个条件?

我试着谷歌搜索失败了。 使用C,我有一个IF语句。 我想针对两个非连续值测试变量。 有可能吗? if(state == 1 || 3) 意味着如果state为1或state为3。 或者它必须是 if(state == 1 || state == 3) 我认为第一个实际上意味着如果状态是1或3,这意味着测试将始终为真(如果为真或真)。 有没有办法写这个而不必多次重写变量名? 不,我不想使用case / switch语句。 我想减少打字。

即使参数是函数调用,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中的逻辑运算符在没有必要的时候不会评估整个表达式?

我正在阅读我的计算机体系结构课程的教科书,我发现了这个声明。 逻辑运算符’ && ‘和’ ||之间的第二个重要区别 ‘与他们的比特级对手’ & ‘和’ | ‘如果可以通过计算第一个参数来确定表达式的结果,那么逻辑运算符不会计算它们的第二个参数。 因此,例如,表达式a && 5/a将永远不会导致除零,而表达式p && *p++将永远不会导致空指针的解除引用。 (计算机系统:由Bryant和O’Hallaron撰写的程序员观点,第3版,第57页) 我的问题是为什么C中的逻辑运算符表现如此? 使用作者的a && 5/a的例子,C不需要评估整个表达式,因为&&要求两个谓词都是真的吗? 不失一般性,我的同样问题适用于他的第二个例子。