【问题与思考】1+"1"=?

概述

在数学中1+1=2,在程序中1+1=2,而1+"1"=?

围绕着1+"1"的问题,我们来思考下这个问题。

目录:

一、在.Net代码中

二、在JavaScript代码中

三、在SQLServer代码中

四、在PowerShell代码中

五、还有更多的语言值得我们去探讨

一、在.Net代码中

(1)代码如下所示:

Console.Write("例1:");
Console.WriteLine("1 + " + ‘"‘ + "1" + ‘"‘+" = ?");
int a = 1;
Console.WriteLine("a = {0}", a);
Console.WriteLine("a 的类型:{0}", a.GetType());

string b = "1";
Console.WriteLine("b = " + ‘"‘ + "1" + ‘"‘);
Console.WriteLine("b 的类型:{0}", b.GetType());

Console.WriteLine("a + b = {0}",a+b);
Console.WriteLine("a + b 的类型:{0}", (a + b).GetType());

Console.WriteLine();
Console.WriteLine();

Console.Write("例2:");
Console.WriteLine("1 + ‘1‘ = ?");
Console.WriteLine("a = {0}", a);
Console.WriteLine("a 的类型:{0}", a.GetType());

char c = ‘1‘;
Console.WriteLine("c = " + "‘1‘");
Console.WriteLine("c 的类型:{0}", c.GetType());

Console.WriteLine("a + c = {0}", a + c);
Console.WriteLine("a + c 的类型:{0}", (a + c).GetType());

(2)运行结果:

(3)结论:

  在.Net代码中

  1. int类型和string类型进行"+"操作,int类型会默认强制转换为string类型,所以最后的结果是两个string类型进行字符串的拼接,所以结果是"1"+"1"="11";
  2. int类型和char类型进行"+"操作,char类型会默认强制转换ASCII码对应的值(char类型‘1‘对应的ASCII码的值为49),且值为int类型,所以最后的结果是两个int类型进行字符串的相加,所以结果是1+49=50;

(4)附录一:ASCII码表

    

二、在JavaScript代码中

(1)代码如下所示:

<html>
<head>
    <script>

        //例1:1 + "1" = ?
        var a = 1;
        var b = "1";
        var result = a + b;
        alert(result);

        //例2:1 + ‘1‘ = ?
        var c = ‘1‘;
        var result = a + c;
        alert(result);

        //例3:1 + ‘a‘ = ?
        var c = ‘a‘;
        var result = a + c;
        alert(result);

    </script>
<body>

</body>
</html>

(2)运行结果:

例1、例2运行结果都是11,如图1

图1

例3运行结果是1a,如图2

图2

图3

(3)结论:

  在JavaScript代码中

  1. 根据图三可以判断,JavaScript没有char类型;
  2. int类型和string类型进行"+"操作,int类型会默认强制转换为string类型,所以最后的结果是两个string类型进行字符串的拼接,所以结果是"1"+"1"="11";
  3. 这种形式的‘1‘会被解析为string类型,所以1+‘1‘的结果和1+"1"的结果相同。

三、在SQLServer代码中

(1)代码如下所示:

----例1
--declare  @a int
--declare  @b char
--set @a=1
--set @b=‘1‘
--print ‘例1结果:‘
--print @[email protected] --2

----例2
--declare  @c char
--set @c=‘12‘
--print ‘例2结果:‘
--print @[email protected] --2

----例3
--declare  @d char
--set @d=‘d‘
--print ‘例3结果:‘
--print @[email protected] --在将 varchar 值 ‘d‘ 转换成数据类型 int 时失败。

--例4
print ‘例4结果:‘
select 1+‘1‘ as ‘例4结果‘

--例5
print ‘例5结果:‘
select 1+‘12‘ as ‘例5结果‘

(2)运行结果:

(3)结论:

  在SQL Server代码中

  1. 没有string这种类型;
  2. 由例1、例2可以推出:int类型的变量和char类型进行"+"操作,char类型会默认强制转换第一个字符为int类型,后面的字符舍去,所以最后的结果是两个int类型进行字符串的相加,所以结果是1+‘1‘=2,1+‘12‘=2;
  3. 由例3可以推出,int类型的变量和char类型进行"+"操作,当char类型里面的值不是由0~9这几个数字组成时,将会报错:在将 varchar 值 ‘d‘ 转换成数据类型 int 时失败;
  4. 由例4、例5可以推出:用select查询时,int类型的变量和char类型进行"+"操作,char类型会默认强制转换int类型,所以最后的结果是两个int类型进行相加,所以查询出来的集合是1+‘1‘=2,1+‘12‘=13。

四、在PowerShell代码中

(1)代码如下所示:

#例1 1+‘1‘=?
$a=1
$b=‘1‘
$a+$b

#例2 1+‘12‘=?
$a=1
$b=‘12‘
$a+$b

#例3 1+"1"=?
$a=1
$c="1"
$a+$c

#例3 1+"a"=?
$a=1
$d="a"
$a+$d

(2)运行结果:

(3)结论:

  在PowerShell代码中

  1. 没有char类型,‘‘和""是同一种标识字符串类型的标识符。
  2. int类型和string类型进行"+"操作,string类型会默认强制转换为int类型,所以最后的结果是两个int类型进行相加,所以结果是1+‘1‘=2,1+"1"=2,1+"12"=13;

五、还有更多的语言值得我们去探讨

如下图所示:

时间: 2024-10-25 11:53:02

【问题与思考】1+"1"=?的相关文章

关于迭代測试的一些思考

作者:朱金灿 来源:http://blog.csdn.net/clever101 一个软件的功能的越来越多,怎样建立一个规范的測试流程来保证对开发的功能进行充分的測试,是摆在我们面前的难题.在改动bug中经常会出现一种"按下葫芦浮起瓢"情形--改动了A模块的bug,却造成了原来測试没有问题的B模块出现了新的问题.这就促使我们思考:怎样保证測试的百分百的覆盖率.为此我设想一种迭代測试和迭代公布的流程.这个流程详细是这种:全部功能測试分为常规功能測试和新功能測试.所谓常规功能測试是指之前測

关于重构工作的一点思考

最近两周一直忙着和重构相关的事情,本文将简要概述从开始制定重构方案,到具体执行的过程中遇到的问题,以及对重构的一点理性思考. 起因: 本系统是2015年11月开始建设,当时为了快速投入使用,大量的烂代码,后期一直保持快速前进,没有进行过实质性的重构. 具体表现: ● 分层不清,sql哪都有,dao有.service也有,就差controller没写了.同样dao也包含业务逻辑. ● sql用的是spring jdbc,并没有使用mybatis,导致sql写起来有些复杂,封装不够基本都是原始sql

php各种设计模式简单实践思考

前言 我一直觉得什么框架,版本,甚至语言对于一个coder来说真的不算什么,掌握一个特别高大上的一个框架或者是一个新的,少众的语言真的不算什么,因为你可以,我要花时间也可以,大家都是这样的.所以基本的显得额外重要,即是算法和数据结构,再就是好的设计模式了,,,听过一句话,是好的数据结构是让计算机更快的工作,而一个好的设计模式则是使开发者工作的更快! 单例模式 单例模式特点 $_instance 必须声明为静态的私有变量 构造函数和克隆函数必须声明为私有的,这是为了防止外部程序 new 类从而失去

由爬虫引发的思考

前言 花了两天时间写一个简单的爬虫程序.目前所用的技术十分简单.就是获得目标页面的html文档内容,然后解析其中有用的内容.既没有实现模拟登陆,也没有任何防止反爬虫的措施,甚至没有使用多线程.不过在其中遇到的问题还是引发了我很多的思考与问题,比如爬虫的合法性问题以及爬虫的危害等.于是写下这篇文章记录一下.由于本人经验有限,引用参考了大量文章,有问题请指出. 爬虫的作用与危害 爬虫的作用 网络爬虫(Web Crawler),又称网络蜘蛛(Web Spider)或网络机器人(Web Robot),是

第二十三篇:信号机制的两个思考

前言 前文介绍了最基本的信号接收和处理,但这有无可能带来一些问题呢? 本文将通过两个思考,来分析可能带来的问题以及解决方法. 思考一:中断的系统调用 如果用户正在执行系统调用,如 write read.如果这个时候程序跳转到了信号处理函数后返回,则是否重新执行这个系统调用? 结论 这要分情况讨论:如果是磁盘 I/O 的系统调用,则自然需要自动重启:而如果是终端 I/O,则不需要自动重启. 在信号函数族中,有很多函数都是支持设置是否重启选项的.当然,用户也可以使用类似下面的代码自行实现重启: 思考

sql monitor生成不了报告&amp; FFS hint不生效两个问题思考

事情的发生就是这么偶然,一步步的深入才能汲取到更深入的知识~~ -------------------START-------------------------------------------   来了一个query running longer than 4hours的邮件,来看看里面有哪些sql: SID    SERIAL#    INST_ID SQL_ID        Run_in_sec OS_user     MACHINE       SQL_TEXT         

MapReduce源码分析之Task中关于对应TaskAttempt存储Map方案的一些思考

我们知道,MapReduce有三层调度模型,即Job-->Task-->TaskAttempt,并且: 1.通常一个Job存在多个Task,这些Task总共有Map Task和Redcue Task两种大的类型(为简化描述,Map-Only作业.JobSetup Task等复杂的情况这里不做考虑): 2.每个Task可以尝试运行1-n此,而且通常很多情况下都是1次,只有当开启了推测执行原理且存在拖后腿Task,或者Task之前执行失败时,Task才执行多次. 而TaskImpl中存在一个成员变

职场思考--对产品经理岗位的技术思考(上)

有的时候就在想,技术特别牛的人是不是会一直做技术呀!毕竟,一直习惯了自己的那个技术圈子.要从那个圈子里出来,去考虑市场,运营,行业.......一系列的问题.相当于从自己已有的一个优势中跳出来,会有多少的不习惯.但最近通过跟一些朋友的聊天才发现,对于产品经理这个职位而言.又有了一个更为深入的思考. 从市场行为倒推论技术研发 做技术的人讲究要严谨,一丝一毫的差距可能都会影响最终产品的性能.而做产品经理,你所要考虑的就不仅仅是技术.换一个角度来说,对技术,你可以要求细节.但对一些看似反常的市场行为来

关于过拟合、局部最小值、以及Poor Generalization的思考

Poor Generalization 这可能是实际中遇到的最多问题. 比如FC网络为什么效果比CNN差那么多啊,是不是陷入局部最小值啊?是不是过拟合啊?是不是欠拟合啊? 在操场跑步的时候,又从SVM角度思考了一下,我认为Poor Generalization属于过拟合范畴. 与我的论文 [深度神经网络在面部情感分析系统中的应用与改良] 的观点一致. SVM ImageNet 2012上出现了一个经典虐杀场景.见[知乎专栏] 里面有一段这么说道: 当时,大多数的研究小组还都在用传统compute

企业级产品思考(二)

接着这个话题写完吧,以前弄到腾讯内部的产品架构ppt,其中谈到一条:不为企业产品做架构!这点深有体会,因为重口难调,极端的可能是两个需求对应两种完全不同的架构,比如我们老版本的客户端重写了explorer,优点是我们可以控制用户行为,缺点是容易出bug,同步不流畅,容易卡死,新版本参考svn做了同步功能,体验爽了,流畅了但是控制不了用户行为,这个时候用户提出一个需求:同步下来的文件我不想员工轻易复制走!!何解?那么如何思考企业产品的设计来迎合需求,我想这个问题永远只有一个临时答案. 我想从第一篇