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

string.length()-1比较为什么会出现匪夷所思结果

今天调试程序发现了个匪夷所思事情,-1string.length()比较永远是-1大,看下面代码 #include #include using namespace...-1<str.length() 这两段程序看似应该输出一样结果,可是实际却不是,这不禁让我想起来之前自己写一篇博客,C++中隐式类型换http://www.cnblogs.com/bewolf/p.../4358006.html 一查,果然是这样,str.length()返回值是unsigned int,如果直接-1比较的话,比较过程int会被隐式转化成unsigned int,所以-1会变成很大数...,当然“-1就比3还要大了”,而如果str.length()赋值给int类型变量,那么会像被赋值类型进行转换,所以str.length()会被转换成int类型,到时候就是-1和一个int类型变量比较...,结果就是我们想要正常结果了。

73180

Python中is和==区别

is和==都是对对象进行比较判断作用,但对对象比较判断内容并不相同。下面来看看具体区别在哪?...看下面代码, a和b变量id不同, 所以b==a是True, b is a 是False....当我们再声明一个整型b时候会继续开辟空间用于存储信息。但是当我们a直接赋值给第三个整型c时候,却是直接a地址传递给c,这个过程并不会开辟新空间,节省了内存。这个时候,ac地址就会一样。...上述说明利用赋值创建新变量过程实质是内存地址传递!然直接声明一个变量却会重新开辟空间! 备注:Python3.6.4对上述测试结果如下,说明版本迭代中修改了small_ints。 ? ?...a is b False >>> a = set([1,2,3])#a和bset类型 >>> b = set([1,2,3]) >>> a is b False 结论 当变量是数字、字符串、元组,列表

62830
您找到你想要的搜索结果了吗?
是的
没有找到

算法工程师-SQL进阶:温柔陷阱-NULL

3、第三个真值:unknown 这里引入第三个真值,unknown,注意,unknown和前面说NULL一种情况:'UNKNOWN'(未知)是不一样,unknown是true和false概念一样逻辑真值...首先,这是一段简单case表达式写法,会将col_1值从上到下依次when进行比较,一旦符合就break,不会再进行下面的分支判断。...; -- 子查询结果是空行 (4)WHERE true; -- 子查询没有返回结果,因此相反地,NOT EXISTS true 因此,agenull文生同学,任何人年龄比较结果都是true...相信聪明读者已经能找到原因了,因为,子查询结果中存在NULL,和前面的NOT IN 类似,ALL 运算实际执行时也是每个列表元素一一比较,然后进行AND运算,最终结果不是false就是unknown...如果聚合函数null行过滤后,结果空集合,或者传入聚合函数本身集合本身就是空集,聚合函数会返回NULL。

80420

Java并发编程之CAS第一篇理解

当数据库中存储和用户输入原密码对比相同时候,才可以原密码更新新密码。否则就不能更新。...如果有了上面三个概念,我们就来看看什么是CAS 二:什么是CAS CAS定义: CAS:Compare and Swap 三个字母缩写。 是什么意思呢?Compare:比较 Swap:交换。...代码如下图: 问题: 在12和13行,运行后结果是什么呢? true 运行后。当前i:2020 false 运行后。当前i:2020 为什么会是这样呢?...运行结果分析 我们来分析: 在11行时候,声明了变量i.并赋值1(即V),然后第12行,拿着预期值1(即A),和将要更新值2020(即B).进行CAS之后,因为1==1也就是V==A。...这个时候,V值不能被更新,所以第13行输出是就是false和2020. 在看下面: 问题:第14行输出是什么呢 ? 我们来看看运行结果为什么呢?大家可以尝试这去分析分析。

47220

送给小白 7 个 python 小坑

,对作用域中变量进行赋值时,Python会自动将该变量视为该作用域本地变量,并在外部作用域中隐藏任何类似命名变量。...、 解决办法是临时值也保存在匿名函数作用域内,在声明匿名函数时就查询变量值。 了解原理之后,让我们来改一改代码,surprise!...如果新建对象之后,b 和 a 指向了不同内存,那么 b is a 结果False,而 b==a结果True。...Python仅仅对比较整数对象进行缓存(范围范围[-5, 256])缓存起来,而并非是所有整数对象。...=和==含义不同: =代表含义是赋值,某一数值赋给某个变量,比如a=3,3这个数值赋予给a。 ==是判断是否相等,返回True或False,比如1==1。他们是相等,那么就返回true。

62420

面试官提问:说说你对volatile关键字理解?

原因其实也很简单,虽然主线程mainisRunning变量设置false,但是线程threadA 里面的isRunning变量还是true,两个线程看到数据不一致。...说明当主线程mainisRunning变量设置false时,线程threadA 里面的isRunning值也随着发生变化。...100000=500000,从实际运行结果可以看出,预期不一致。...如果想要实现预期一致结果,有以下三种方案可选。...1.它确保指令重排序时,不会把后面的指令排到内存屏障之前位置,也不会把前面的指令排到内存屏障后面,禁止处理器对影响程序执行结果指令进行重排 2.它会强制缓存修改操作立刻写入主存,保证内存变量可见

22320

【从零学习python 】07.Python运算符详解:赋值、比较和逻辑运算符

赋值运算符 基本赋值运算符 运算符 描述 实例 = 赋值运算符 把 = 号右边结果 赋给 左边变量,如 num = 1 + 2 * 3,结果num7 单个变量赋值: num = 10 num...比较运算符 以下假设变量a10,变量b20: 运算符 描述 实例 == 等于 - 比较对象是否相等 (a == b) 返回 False != 不等于 - 比较两个对象是否不相等 (a !...= > 大于 - 返回x是否大于y (a > b) 返回 False < 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别特殊变量True和False等价。...str1 == a 如果是两个字符串进行比较,会将每个字符都转换成对应编码,然后逐一进行对比。...逻辑运算和逻辑或运算取值时为什么是那种规则。

11510

神奇 SQL 之温柔陷阱 → 三值逻辑 NULL !

这个问题我们先放着,我们往下看 三值逻辑   这个三值逻辑不是三目运算,指的是三个逻辑值,有人可能有疑问了,逻辑值不是只有真(true)和假(false)吗,哪来三个?...而查询结果只会包含 WHERE 子句里判断结果 true 行,不会包含判断结果 false 和 unknown 行。不只是等号,对 NULL 使用其他比较谓词,结果也都是一样。...这是因为,NULL 既不是值也不是变量。NULL 只是一个表示“没有值”标记,而比较谓词只适用于值。因此,对并非值 NULL 使用比较谓词本来就是没有意义。...NOT EXISTS 不是等价     我们在对 SQL 语句进行性能优化时,经常用到一个技巧是 IN 改写成 EXISTS ,这是等价改写,并没有什么问题。...在进行了一系列转换后,没有一条记录在 WHERE 子句里被判断 true 。

1.3K20

看完这几道 JavaScript 面试题,让你考官对答如流(上)

比较两个值之前,==需要执行一些规则。 假设我们要比较x == y值。 如果x和y类型相同,则 JS 会换成===操作符进行比较。 如果xnull, yundefined,则返回true。...]' {} false 如果使用===运算符,则第一个示例以外所有比较返回false,因为它们类型不同,而第一个示例返回true,因为两者类型和值相同。...在基本类型中,JS 通过值对它们进行比较,而在对象中,JS 通过引用或存储变量内存中地址对它们进行比较。...首先,我们x值增加到6,然后调用函数addFive(6)并将6作为参数传递并将结果重新分配给x,此时x11。之后,x的当前值乘以2并将其分配给x,x更新值22。...然后,x的当前值减去5并将结果分配给x x更新后17。最后,我们x值增加10,然后更新值分配给x,最终x27。 18. 什么是提升?

2K10

Python基础语法入门篇(一)

,再与左边变量值运算 >>> a = 100 >>> a *= 1 + 2 # 相当于执行 a = a * (1+2) >>> a 300 5.5 比较运算符 以下假设变量a10,变量b20...and x and y 只要有一个运算数是False结果就是False; 只有所有的运算数都为True时,结果才是True 做取值运算时,取第一个False值,如果所有的值 都为True,取最后一个值...; 只有所有的运算数都为False时,结果才是False 做取值运算时,取第一个True值,如果所有的值都 False,取最后一个值 False or False or True–>结 果True...如果 x False,它返回 True。 not True --> False 性能提升 面试题:一下代码输出结果是什么,为什么会有这样输出。...当and前边是False情况下,那么后边代码不会执行 or:只要有一方True,那么结果就是True 逻辑运算和逻辑或运算取值时为什么是那种规则。

36720

四道Java基础题,你能对几道?

官方解释是小数字使用频率比较高,所以为了优化性能,把这之间数缓存了下来。这就是为什么这道题答案回事false和ture了。...按照==语法来看, 首先s1、s2、s3是三个不同对象,常理来说,输出都会是false。然而程序运行结果确实true、false。第二个输出false可以理解,第一个输出true就又让人费解了。...这不是应该是true嘛,但是你仔细看,这里Integer是我们自己new出来,并不是用缓存,所以结果false。 现在来看第一个为啥又是true了呢?...首先这里1000,肯定和我们所知Integer缓存没有关系。既然和缓存没有关系,a是新new出来对象,按理说输入应该是false才对。但是注意b这里是int类型。...当int和Integer进行==比较时候,Java会把Integer进行自动拆箱,也就是把Integer转成int类型,所以这里进行比较是int类型值,所以结果即为true。

1.6K10

大话 JavaScript(Speaking JavaScript):第六章到第十章

三个等号(===)用于比较两个值(参见相等运算符)。 注释 有两种注释: 通过//进行单行注释,延伸到行其余部分。...为什么 JavaScript 有两个这样值?原因是历史性。 JavaScript 采用了 Java 对值进行分区基元和对象方法。它还使用了 Java “不是对象”值,null。...OK true > '' == 0 // 0 === 0 true 陷阱:宽松相等和对象 如果你一个对象一个非对象进行比较,它会被转换为原始值,这会导致奇怪结果: > {} == '[object...«if_true» : «if_false» 如果条件true,则结果if_true; 否则,结果if_false。 例如: var x = (obj ?...true 对于第一个用例,直接undefined进行比较通常是更好选择。

26010

python 基础知识第4讲:运算符

x=3-1 print(x) 执行结果:2 数字相乘()代码示例* x=3*3 print(x) 执行结果:9 字符串相乘()代码示例* 如果字符串和数字相乘,则会对字符串进行复制操作,字符串重复指定次数...执行结果:5.0 数字取余(% 模)代码示例 取2个数相除余数 x=7/3 print(x) 执行结果: 4.0 2.赋值运算符 就是一个数据赋值给一个变量,由=连接,=就是赋值运算符...False,剩下都是True x=2 and 4 print(x) 执行结果:4 2 and 逻辑 可以对符号两侧进行运算 只有在符号两侧都是True情况下才会返回True,只要有一个...当我们对非布尔值进行或运算时候,Python会将其当做布尔值进行运算,最终会返回原值 x=2 and 4 print(x) 执行结果:4 运算规则 运算找Fasle,如果第一个值是...a>b else print('b值大') 执行结果:b值大 max=a if a>b else b print(max) 执行结果:40 # a,b ,c 三个变量,通过条件运算符获取三个值当中最大值

47020

Java基础:运算符篇

实例 结果 + 其用法主要分三个方面:1.表示正数;2.两边数字相加;3.拼接(两边字符串拼接) 1.表示正数 :+(-2);2.表示数字相加:两边必须都是整型;3.讲两边字符串进行拼接处理; 1....4<=2 false == 相等 如果进行比较两个操作数都是数值类型,无论它们数据类型是否相同,只要它们值相等,也都将返回 true。...、按位或(|)、按位异或(^)、取反(~)、左移(>)和无符号右移(>>>) 其中只有 ~ 是单目运算符 按位(&): 就是两个变量二进制进行比较比较都为1则返回1,一个...//13:00001101 //14:00001110 //按位运算就是每一位二进制进行比较,都为1则1 //这样得出:00001100 //那么00001100转换为10进制就是System.out.println...&true 也是按照二进制进行比较,只是如果相同,根据上面的规则肯定也十分返回true,短路只是差了短路而已,所以也叫逻辑; 逻辑或同理; 按位异或(^) 比较二进制两个相同则返回0,不同则返回

40410

前端学习(28)~js学习(六):运算符

运算符定义 运算符:也叫操作符,是一种符号。通过运算符可以对一个或多个值进行运算,并获取运算结果。 表达式:由数字、运算符、变量组合(组成式子)。...逻辑运算符 逻辑运算符有三个: && (且):两个都为真,结果真。 || 或:只要有一个是真,结果就是真。 ! 非:对一个布尔值进行取反。...(2)JS中&&属于短路,如果第一个值false,则不会看第二个值。 (3)JS中||属于短路或,如果第一个值true,则不会看第二个值。...运算返回结果:(以两个非布尔值运算例) 如果第一个值false,则直接返回第一个值;不会再往后执行。...语句1 : 语句2; 执行流程: 条件运算符在执行时,首先对条件表达式进行求值: 如果该值true,则执行语句1,并返回执行结果 如果该值false,则执行语句2,并返回执行结果 如果条件表达式求值结果是一个非布尔值

1.9K10

面试题系列第3篇:Integer等号判断内幕,你可能不知道?

面试题 先来看一道常见面试题,对照上面的结论,看看能够答对几项。下面代码中打印结果true有几项?...: A:true B:true C:false D:true E:true F:false 只有C和F项打印false。...因为在栈中已经有3这个值,便b直接指向3。 此时,ab同时指向3这个值,自然是相等。...因为通过new和valueOf创建是完全两个对象,那么针对题目中C项,直接比较两个对象引用肯定是不相等,因此结果false。但B项为什么true呢?后面我们会讲到。...比较拆箱 在题目中,我们发现A、D都为true,而且它们比较格式都是基础类型包装类型对比。 针对这种形式对比,包装类型会进行自动拆箱,变成基础类型(int)。很显然,结果是相等

60330

Python 学习 第三天 课后总结:

单行注释:只注释一行代码在需要注释所在行行首使用#号来注释此行,注意#代码之间需要加一个空格        多行注释: 注释二行以上代码时,在需要注释内容行首行尾各加上三个单引号或三个双引号即可...   布尔值有  真(True) 假(False)  二种结果         一般用于判断表达式是否成立时使用。         ...解压运算符: 如  a,b,c,d = [1,2,3,4]  等于左边变量右边值一一对应         a,b,a,a,a = [1,2,3,4,5]  为什么最后a 5?           ...逻辑运算符:  用于判断表示式结果真或假            逻辑:                使用and连接左右两个条件表达式,当两边结果都为真时结果真,有一边假时结果假           ...身份运算符:判断二个数据是否同一个值          is    判断变量id 是否相等,是否占用同一个内存空间          ==    判断变量值是否相等          两个变量比较

83310

四.算术运算、逻辑运算、赋值运算、位运算及编程练习

常见包括算术运算符、赋值运算符、比较运算符(关系运算符)、逻辑运算符、位运算符和其他运算符。 一.算术运算 算术运算符是对数值类型变量进行运算,比如:加减乘除。...(age>30)") } } 输出结果如下图所示: 逻辑运算符注意事项: &&又叫短路:如果第一个条件False,则第二个条件不会判断,最终结果False ||又叫短路或:如果第一个条件...: 案例1:变量a和b进行交换,并输出结果。...Golang中3个位运算符规则如下: 按位运算 &:两位同时1,结果1,否则为0 按位或运算 |:两位有一个1,结果1,否则为0 按位异或运算 ^:两位一个0,一个1,结果1,否则为0...(2) 求三个数中最大值并输出结果。 (3) 给出三角形三边长,求三角形面积。 (4) 输入两个整数,分别计算它们运算、或运算和异或运算结果

56810

面试官:兄弟,说说基本类型和包装类型区别吧

而 chenmo.equals(wanger) 输出结果 true,是因为 equals 方法内部比较是两个 int 值是否相等。源码如下。...换句话说就是:“==”操作符应用于包装类型比较时候,其结果很可能会和预期不符。 04、自动装箱和自动拆箱 既然有了基本类型和包装类型,肯定有些时候要在它们之间进行转换。...有举手要回答吗?答对奖励一朵小红花哦。 第一段代码,基本类型和包装类型进行 == 比较,这时候 b 会自动拆箱,直接和 a 比较值,所以结果 true。...第二段代码,两个包装类型都被赋值为了 100,这时候会进行自动装箱,那 == 结果会是什么呢? 我们之前结论是:“==”操作符应用于包装类型比较时候,其结果很可能会和预期不符。...吃了第二段代码亏后,是不是有点怀疑人生了,这次结果是 true 还是 false 呢?扔个硬币吧,哈哈。我先告诉你结果吧,false为什么为什么为什么呢?

52951
领券