首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么这段C代码输出1而不是0?

这段C代码输出1而不是0的原因是因为在C语言中,逻辑运算符"&&"和"||"具有短路特性。当使用"&&"运算符时,如果第一个条件为假,则不会执行第二个条件的判断,直接返回假;而当使用"||"运算符时,如果第一个条件为真,则不会执行第二个条件的判断,直接返回真。

在给定的代码中,条件表达式(a == 0) && (b = 10)中,首先判断(a == 0)是否为真。如果a的值为0,则条件为真,继续判断(b = 10)。在这里,赋值操作(b = 10)会将b的值设置为10,并返回赋值后的值,即10。由于条件为真,所以整个条件表达式的结果为真,即1。

需要注意的是,这段代码中的(b = 10)是一个赋值操作,而不是比较操作。如果想要进行比较操作,应该使用双等号"==",即(b == 10)

总结起来,这段C代码输出1而不是0的原因是因为逻辑运算符"&&"具有短路特性,当第一个条件为真时,不会执行第二个条件的判断,直接返回真。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么数组下标从 0 开始?不是 1

很多小伙伴初学编程的时候都被元素下标折磨过,为什么很多编程语言要把 0 作为第一个下标索引,不是直观的 1 呢?...,那是否有理由选择其中的一种不是另一种?...2 个不等式来说,下界小于序列中的最小值,这会出现一个问题,比如我们的连续序列是 [0,1,2,3,4] 那么按照第 2 个不等式的写法,不等式的左边就是 -1,-1 是非自然数,而我们需要表示的连续序列是自然数序列...遵循不等式 1 的规则: 当从下标 1 开始时,下标范围 1 ≤ i < N+1 当从下标 0 开始时,下标范围 0 ≤ i < N 哪个更优雅?...Dijkstra 是这样解释的:从下标 0 开始能够给出更好的不等式,因为元素的下标就等于序列中它前面的元素数(或者说 “偏移量”)。 问题解决!

82830

为什么这段代码输出的是”Hello World”

Stackoverlfow.com上有一篇有趣的讨论帖: 在这篇帖子里提到了如下的程序: 明明是在程序里使用了java.util.Ramdom()函数产生随机数,为什么每次打出的结果都是Hello world...首先看一下这个程序的工作原理: 通过这句命令首先得到的六个数是: 8 5 12 12 15 0 然后,通过new Random(-147909649).nextInt(27)得到的6个数是: 23 15...18 12 4 0 这样一来,根据:sb.append((char) (‘`’+n)); 得到: 8 + 96 = 104 --> h 5 + 96 = 101 --> e 12 + 96 = 108...关于这个程序的运行原理的解释,最置顶的一个回复如下: “如果java.util.Random是被一个具体的数字做为“随机数种子”实例化(在本例中是-229985452和-147909649),那么该实例就会以这个随机数种子作为随机算法产生随机数的基础...这就是为什么每次运行该程序都会产生同样的结果的原理啦~ 当然,关于这个话题,高手林立的Stackoverflow上是不缺乏懂行的专家和见解的。

93920

为什么用 if(0 == x) 不是 if(x == 0) ?

大家好,今天跟大伙分享一个编程小技巧方面的知识:标题已经给出了,为什么有的人更愿意用 if ( 0 == x)不是 if(x == 0)?...其实这个写法不仅是在C中,其他语言中也合适,而这么写的初衷就是为了来防止错误的。如果你养成了把常量放在==前面的习惯,那么当你意外不小心地把代码写成了 if(0 = x) 时,编译器就会报错。...坦白讲,就算是经验老道的程序员有时也会错把==写成=,大多数人会觉得记住倒转比记住输入两个=号更容易,所以大家就喜欢写成if ( 0 == x)了, 当然这个技巧只对和常量比较的情况有用。...到这儿,有人会说这样写既难看又影响注意力,为什么不让编译器对if (x = 0 ) 报警呢?...好了,就说到这里吧,分享的知识虽小且简单,但还是希望大家重视,毕竟不积跬步无以至千里,当你写的代码足够多的时候,你会发现出现bug的位置往往是一些极不起眼的地方,最后感谢大家的耐心阅读!

1.6K30

为什么这段代码输出的是”Hello World”

Stackoverlfow.com上有一篇有趣的讨论帖: 在这篇帖子里提到了如下的程序: 明明是在程序里使用了java.util.Ramdom()函数产生随机数,为什么每次打出的结果都是Hello world...首先看一下这个程序的工作原理: 通过这句命令首先得到的六个数是: 8 5 12 12 15 0 然后,通过new Random(-147909649).nextInt(27)得到的6个数是: 23 15...18 12 4 0 这样一来,根据:sb.append((char) (‘`’+n)); 得到: 8 + 96 = 104 --> h 5 + 96 = 101 --> e 12 + 96 = 108...关于这个程序的运行原理的解释,最置顶的一个回复如下: “如果java.util.Random是被一个具体的数字做为“随机数种子”实例化(在本例中是-229985452和-147909649),那么该实例就会以这个随机数种子作为随机算法产生随机数的基础...这就是为什么每次运行该程序都会产生同样的结果的原理啦~ 当然,关于这个话题,高手林立的Stackoverflow上是不缺乏懂行的专家和见解的。

96020

为什么要用日志库不是print进行日志输出

为什么要用日志库不是System.out.println() 类似于上面出现的情况,我们大多数情况下对于日志的输出都会有个固定的目录。其中涉及到服务器的管理、架构、权限、灵活性等。...如果不使用日志库的方案的话每次修改通知类型都需要去项目中修改代码。 log4j输出的好处 灵活性 当你输出日志的时候总是会遇到几个情况....当我们需要删除某些日志的输出时,也可以通过配置文件来进行处理。不需要进行应用程序代码的修改。...整体总结 使用日志库不是System.out.println()因为其更具有灵活性,能够自定义的实现标准输出与设置过滤日志级别等,通过级别增加通知方式。不是需要修改代码的来实现。...日志库允许逐级控制日志目录,提供细粒度的日志输出控制。System.out.println()只能提供应用程序级别的控制。 快速实现自定义的输出(通知)。

1.6K21

漫话:如何给女朋友解释为什么计算机从0开始计数,不是1开始?

0开始更优雅 在《为什么程序员喜欢使用0 ≤ i < 10这种左闭右开的形式写for循环?》一文中我们分析过,Dijkstra通过分析,得出在进行范围表达的时候,使用左闭右开的方式更加合理。...计数表示偏移量 很多人学习编程都是从C语言开始的,那么,C语言就是一个典型的0-base语言(以0作为计数的开始),其实,这一约定早在BCPL时代就是这样的了。...在C语言还不叫C语言,还叫BCPL的时候,他的作者马丁·理察德就设计了数组从0开始的索引方式。...但是值得一提的是,在C语言流行起来之前,还是有很多1-base的编程语言的,如FORTRAN、BASIC等编程语言的数组下标都是从1开始的。 随着C语言的发扬光大,很多语言都参考了C语言的做法。...(1-based indexing),而对Python语言有巨大影响的另一门语言,C语言的索引则是从0开始的。

99040

为什么 Docker 和 Kubernetes 是用 Go 写的不是 C# ?

HahahahahaSoFunny 为什么 Docker 和 Kubernetes 工具是用 Go 写的不是 C#? 总所周知,现在开发人员使用的很多新工具大多是用 Go 写的。...为什么不是 C# 呢? .NET 和 C# 现在功能已经很强大了,是不是社区缺少这种文化?如何才能培养一种更加开源的文化, 因为很多开发人员对 .NET 和 C# 仍然还抱有偏见。...Rust 编译器的第一个编号的 pre-alpha 版本在 2012 年 1 月发布。 答案已经很清楚了,在创建 docker 的时候,实际上不可能用 C# 或 Rust 编写 Docker。...C/C++ 这样的稍微低级的语言可以让您更接近硬件,对性能有要求时,这是最合适的。 我可以用螺丝刀敲打钉子很多次,也可以用锤子花很大的力气把螺丝打进去,都可以完成工作。... GO 是一门简单的语言,很受欢迎,因为好的代码应该易于阅读和理解,以便成千上万的开源程序员做出贡献。 Go 大概只有 25 个关键字, C# 有 100 多个,并且有很多语法糖。

1.1K00

为什么不是0,1,2,3,4?setTimeout的奇怪问题

网上看到这样一个题目: for(let i=0;i<5;i++){ setTimeout(function(){alert(i)},0) } 它输出的顺序并不是01,2,3,4,也不是固定的某一个顺序的数字...,而是几乎每一次执行时的输出数字都不一样。...为什么是这样呢?...其实这里有三个关键点, 1、let,它声明了一个块级作用域; 2、alert,它引起了js的阻塞; 3、setTimeout添加到js队列; 简单的讲, 1、js中没有任何可以立即执行的代码,它们都是需要被添加到队列中...2、setTimeout并不是指定了间隔时间就一定会按指定时间执行。它只是说“在指定时间之后,加入队列,等待执行”。至于什么时候执行,要看进程队列的空闲程度。

64790

面试题46:为什么Redis使用SDS不是C字符串?

1个字节(ASCII表示),由于汉字是2个字节,所以无法保存 char buf[]; }; 数据结构如下所示: 【说明】最后一位遵循C字符串的空字符('\0')结尾的规则,目的是,可以直接使用...其中len计数不包含‘\0’。 ---- 【为什么Redis使用SDS不是C字符串】 首先,C字符串没有记录字符长度,每次都需要遍历,所以复杂度为O(n)。...SDS的len记录了当前字符串的长度,所以获取字符串长度的复杂度为O(1)。 其次:C字符串无法杜绝缓冲区溢出。比如执行strcat函数时,如果没有指定足够的内存,那么拼接后会造成缓冲区溢出。...SDS则采用二进制来保存数据,并且它使用len属性来判断字符串末尾不是空字符。所以,它不仅可以保存文本数据,也可以保存任意格式的二进制数据,如:图片、音频、视频、压缩文件这样的二进制数据。...如果大于1MB,那么程序会分配1MB的未使用空间(free)。

23910

dotnet 为什么每个项目都会输出一个 NuGet 包不是一个包带所有项目

为什么不是我最终只打出一个 NuGet 包,这个 NuGet 包,包含了所有的项目的输出文件?每个项目独立输出是为了解决什么问题?...下面让我为你解答 咱不和官方文档等说原因,咱从问题出发 假设咱有两个库项目分别是 A 和 B 两个项目, A 项目依赖 B 项目 假设咱决定打包的时候将 A 和 B 两个项目的输出文件 A.dll 和...时间过了几个月,我创建了 C 项目,此时 C 项目引用了 B 项目。我因为需要一些特殊的需求,我更改了 B 项目的一些逻辑,也打出了新版本的 C 项目的 NuGet 包。总体依赖关系如下 ?...这就有趣了,我在最终项目里面安装了 A 的 NuGet 和 C 的 NuGet 包,请问最终输出的 B.dll 是新版本还是旧版本?... D 和 E 的依赖分别是 D 引用 A E 引用 C 项目,同时 A 和 C 都引用 B 项目,只是引用的版本不相同 通过引用依赖,可以让 A 和 B 和 C 都会自动安装,如果遇到有相同的依赖

87030
领券