精华内容
下载资源
问答
  • 初学西门子PLC编程的朋友们,对于Bit,Byte,Word,...西门子PLC编程的数据类型分为基本数据类型和复杂数据类型:STEP7数据类型基本数据类型-位数据1、位(bit):位数据的数据类型是BOOL(布尔)型,布尔量只有true或者...

    初学西门子PLC编程的朋友们,对于Bit,Byte,Word,Double Word等数据类型,一定会有一个学习领会的过程,即使是编程高手,对于上面的提问,也不一定能立即给出答案来。今天我们一起来探讨这其中的知识点。

    西门子PLC编程的数据类型分为基本数据类型和复杂数据类型

    78e8b6f3816e6a3bd8a600a7567f64be.png

    STEP7数据类型

    基本数据类型-位数据

    1、位(bit):位数据的数据类型是BOOL(布尔)型,布尔量只有true或者false两种状态,即1或0。

    2、字节(Byte):一个字节由八个bit组成,如QB1,IB8,MB100,DB0.DBB12等。

    3、字(Word):有两个字节组成,16位,表示无符号数,如QW100,MW90,DB1.DBW0。

    4、双字(Doubl Word):由两个字组成,32位,表示无符号数,如QD0,MD12,DB7.DBD4。

    d487fbf710c9383a52856192a213edf4.png

    位、字节、字、双字的组成关系

    MB0由m0.0~m0.7组成,MB1由m1.0~m1.7组成;

    MB2由m2.0~m2.7组成,MB3由m3.0~m3.7组成;

    MW0由MB0和MB1组成,MW2由MB2和MB3组成;

    所以字的编址格式2的整数倍,如MW2,IW10等;

    双字MD0由MW0和MW2组成。

    所以双字的编址格式4的整数倍,如MD4,MD8,IW12,DB3.DBD20等。

    为了更直观的理解,利用STEP7仿真功能,查看变量表在线数据如下图所示。

    8e1bda6765647725630cdfc3639fab2e.png

    划重点

    位变量编址的顺序是从右往左!

    b566af49f69f6a31d395b50b9459dfb4.png

    从右往左

    字节、字、双字的编址顺序是从左往右!

    6c32f94366a2e9e8c895d7466e335974.png

    从左往右

    公布答案:

    MW0等于十进制的4660,用十六进制表示为16#1234,

    4b0929b86176ea1dd0bd0247da2e1ab6.png

    所以MB1=16#34,即二进制的00110100,

    M1.5位于从右往左的第六位,为高电平!

    e165382cb3581f94639fe9b07b77a671.png

    a8b74ddd87c014061f34d7dd0c89aaf1.png

    a5086a718bb7304a8a5b1d5b6d1ef7c7.png

    电工e学堂邀您进群,更多资料群分享!

    0572ff08447f1c2f21aeddc17b02986e.png

    猜你喜欢

    S7-300PLC与ACS800变频器DP通讯调试要点

    西门子PCS7项目下载6大要点

    PN通讯网络子站怎么更换?操作很简单!

    电机铭牌上的信息,你真的看懂了吗?

    低压断路器的两起典型案例

    必须熟记的电工常识!

    四个照明配电柜实现集中停送电,要1万的设计费?

    家装如何选开关插座面板,监理有话说!

    更多精彩

    93aa5937c817178673ce7e67aa9e0d98.png

    有用就点个关注吧!

    展开全文
  • int i = 5就是把i的值赋为5两个等于号是先转换类型再比较的意思比如 1==1 返回的就是true1==2 返回的就是false条件判断语句的格式,一般有以下常见的种格式:1. if(条件){执行的操作},这是最基本的条件判断语句,...

    展开全部

    一个等于号 是赋值操作的意e5a48de588b63231313335323631343130323136353331333365633864思

    比如 int i = 5

    就是把i的值赋为5

    两个等于号是先转换类型再比较的意思

    比如 1==1 返回的就是true

    1==2 返回的就是false

    条件判断语句的格式,一般有以下常见的几种格式:

    1. if(条件){执行的操作},这是最基本的条件判断语句,表示当某条件为真的时候,执行某种操作。

    2. if(条件){执行的操作1}else{执行的操作2},这表示,当某条件为真的时候,执行操作1,否则,执行操作2。

    3. if(条件1){执行的操纵1}else if(条件2){执行的操作2}else if(条件3){执行的操作3}...else if(条件n){执行的操作n}else{执行的操作},这表示,当条件i成立时,执行操作i,如果都不成立,则执行最后的操作。

    Java中的常用的几种符号:

    1、算术运算符主要用于进行基本的算术运算,如加法、减法、乘法、除法等。

    7074121c8b4f197b8ad5cbdff30a57ad.png

    2、Java中的赋值运算符

    赋值运算符是指为变量或常量指定数值的符号。如可以使用 “=” 将右边的表达式结果赋给左边的操作数。

    a0efbf898a0fb5d75110d3edb85a7e6c.png

    3、Java中的逻辑运算符

    逻辑运算符主要用于进行逻辑运算。

    1b69d9495e30a683af5d12dc4b3f072f.png

    与:所有条件都正确,才正确

    或:只要有一个条件正确就正确

    非:如果同意,非运算以后,就是不同意

    异或:条件有且只能有一个是正确,才是正确的

    展开全文
  • 0.3 // true0.1 * 0.1 = 0.0100000000000000021000000000000000128 === 10000000000000001290.1加0.2为什么就不等于0.3昵?要回答这个问题,得先了解计算机内部是如何表示数的。计算机内部如何表示数我们都知道,...

    先看几个简单但诡异的代码:

    0.1 + 0.2 > 0.3 // true

    0.1 * 0.1 = 0.010000000000000002

    1000000000000000128 === 1000000000000000129

    0.1加0.2为什么就不等于0.3昵?要回答这个问题,得先了解计算机内部是如何表示数的。

    计算机内部如何表示数

    我们都知道,计算机用位来储存及处理数据。每一个二进制数(二进制串)都一一对应一个十进制数。

    1. 计算机内部如何表示整数

    这里以十进制数13来展示“按位计数法”如何表示整数:

    十进制值

    进制

    按位格式

    描述

    13

    10

    13

    1x10^1 + 3x10^0 = 10 + 3

    13

    2

    1101

    1x2^3 + 1x2^2 + 0x2^1 + 1x2^0 = 8 + 4 + 0 + 1

    2. 计算机内部如何表示小数

    再看小数怎么用按位计数法表示,以十进制数0.625为例:

    十进制值

    进制

    按位格式

    描述

    0.625

    10

    0.625

    6x10^-1 + 2x10^-2 + 5x10^-3 = 0.6 + 0.02 + 0.005

    0.625

    2

    0.101

    1x2^-1 + 0 x2^-2 + 1x2^-3 = 1/2 + 0 + 1/8

    3. 如何用二进制表示0.1

    关于十进制与二进制间如何转换,这里不细说,直接给出结论:

    十进制整数转二进制方法:除2取余;十进制小数转二进制方法:乘2除整

    十进制0.1转换成二进制,乘2取整过程:

    0.1 * 2 = 0.2 # 0

    0.2 * 2 = 0.4 # 0

    0.4 * 2 = 0.8 # 0

    0.8 * 2 = 1.6 # 1

    0.6 * 2 = 1.2 # 1

    0.2 * 2 = 0.4 # 0

    .....

    从上面可以看出,0.1的二进制格式是:0.0001100011....。这是一个二进制无限循环小数,但计算机内存有限,我们不能用储存所有的小数位数。那么在精度与内存间如何取舍呢?

    答案是:在某个精度点直接舍弃。当然,代价就是,0.1在计算机内部根本就不是精确的0.1,而是一个有舍入误差的0.1。当代码被编译或解释后,0.1已经被四舍五入成一个与之很接近的计算机内部数字,以至于计算还没开始,一个很小的舍入错误就已经产生了。这也就是 0.1 + 0.2 不等于0.3 的原因。

    有误差的两个数,其计算的结果,当然就很可能与我们期望的不一样了。注意前面的这句话中的“很可能”这三个字?为啥是很可能昵?

    0.1 + 0.1 为什么等于0.2

    答案是:两个有舍入误差的值在求和时,相互抵消了,但这种“负负得正,相互抵消”不一定是可靠的,当这两个数字是用不同长度数位来表示的浮点数时,舍入误差可能不会相互抵消。

    又如,对于 0.1 + 0.3 ,结果其实并不是0.4,但0.4是最接近真实结果的数,比其它任何浮点数都更接近。许多语言也就直接显示结果为0.4了,而不展示一个浮点数的真实结果了。

    另外要注意,二进制能精确地表示位数有限且分母是2的倍数的小数,比如0.5,0.5在计算机内部就没有舍入误差。所以0.5 + 0.5 === 1

    计算机这样胡乱舍入,能满足所有的计算需求吗

    我们看两个现实的场景:

    对于一个修建铁路的工程师而言,10米宽,还是10.0001米宽并没有什么不同。铁路工程师就不需要这么高0.x这样的精度

    对于芯片设计师,0.0001米就会是一个巨大不同,他也永远不用处理超过0.1米距离

    不同行业,要求的精度不是线性的,我们允许(对结果无关紧要的)误差存在。10.0001与10.001在铁路工程师看来都是合格的。

    虽然允许误差存在,但程序员在使用浮点数进行计算或逻辑处理时,不注意,就可能出问题。记住,永远不要直接比较两个浮点的大小:

    var a = 0.1

    var b = 0.2

    if (a + b === 0.3) {

    // doSomething

    }

    JS中如何进入浮点数运算

    将浮点运算转换成整数计算

    整数是完全精度的,不存在舍入误差。例如,一些关于人民币的运算,都会以分为基本单位,计算采用分,展示再转换成元。当然,这样也有一些问题,会带来额外的工作量,如果那天人民币新增了一个货币单位,对系统的扩展性也会有考验。

    bignumber.js会在一定精度内,让浮点数计算结果符合我们的期望。

    {

    let x = new BigNumber(0.1);

    let y = new BigNumber(0.2)

    let z = new BigNumber(0.3)

    console.log(z.equals(x.add(y))) // 0.3 === 0.1 + 0.2, true

    console.log(z.minus(x).equals(y)) // true

    console.log(z.minus(y).equals(x)) // true

    }

    {

    let x = 0.2

    console.log(x * x === 0.04) // false

    let y = new BigNumber(0.2)

    let r = y.mul(y) // 0.04

    console.log(r.equals(new BigNumber(0.04))) // true

    }

    更多例子,可以看bignumber.js官方示例。

    在浮点数运算中产生误差值的示例中,最出名应该是0.1 + 0.2 === 0.30000000000000004了,到底有多有名?看看这个网站就知道了http://0.30000000000000004.com/。也就是说不仅是JavaScript会产生这种问题,只要是采用IEEE 754 Floating-point的浮点数编码方式来表示浮点数时,则会产生这类问题

    小结

    本文主要介绍了浮点数计算问题,简单回答了为什么以及怎么办两个问题:

    为什么0.1 + 0.2 不等于0.3。因为计算机不能精确表示0.1, 0.2这样的浮点数,计算时使用的是带有舍入误差的数

    并不是所有的浮点数在计算机内部都存在舍入误差,比如0.5就没有舍入误差

    具有舍入误差的运算结可能会符合我们的期望,原因可能是“负负得正”

    怎么办?1个办法是使用整型代替浮点数计算;2是不要直接比较两个浮点数,而应该使用bignumber.js这样的浮点数运算库

    展开全文
  • 天在学习JS语言,在做一个计算器时发现了一个神奇的bug,0.1+0.2不等于0.3,也就是(0.1 + 0.2 !== 0.3)的值为true,先来看一下在JS中它给出的和是多少 <script type="text/javascript"> var flag=...

    惊闻 0.1 + 0.2 !== 0.3

    前几天在学习JS语言,在做一个计算器时发现了一个神奇的东西,0.1+0.2不等于0.3,也就是(0.1 + 0.2 == 0.3)的值为false,先来看一下在JS中它给出的和是多少

    <script type="text/javascript">
    			var flag=(0.1+0.2==0.3);
    			alert(flag);	//弹框为true	
    			alert(0.1+0.2);
    		</script>
    

    js浮点精度.JPG验证.JPG
    当然这不是一个特例,在js中只要小数参加了四则运算它的精度都会发生丢失

    <script type="text/javascript" language="javascript">     
        alert(1/3);//弹出: 0.3333333333333333  
        alert(0.09999999 + 0.00000001);//弹出: 0.09999999999999999   
        alert(-0.09999999 - 0.00000001);//弹出: -0.09999999999999999  
        alert(0.012345 * 0.000001);//弹出: 1.2344999999999999e-8  
        alert(0.000001 / 0.0001);//弹出: 0.009999999999999998  
    </script>
    

    为什么?

    • 个人理解
      由于数字编码方式的局限性,因此在其进行十进制与二进制准换时,会存在位数上的变化,所以计算机是不能准确的表达出一个小数的,只能是无限的去逼近。
      如果要比较两个浮点型的数据是否相等,那我们也可以采用无限逼近的方式来做
    if(fabs(0.3-(0.1+0.2)) < 1E-10)
    
    • 专业一点的
      JavaScript的number类型按照ECMA的JavaScript标准,它的Number类型就是IEEE 754的双精度数值,相当于java的double类型。IEEE 754标准《二进制浮点数算法》(www.ieee.org)就是一个对实数进行计算机编码的标准。因此精度问题不止JS这门语言独有。

      无论是用纸张记录数值,还是用计算机记录数值,都必须用某种编码方案来表达数值。必须理解的是,用编码表达的数值不是数值本身,而只是数值的一种人类或计算机可理解的描述。任何编码方案都有其局限,要么是表达范围(精度)方面的限制,要么是其他复杂性方面的制约。

      绝对完美的数值编码方案是不存在的,为了处理方便,这个标准引入了大量的折衷和妥协,建立在这种表达方式上的算法(例如除法运算)也一样。由于数值表达方式存在“缺陷”,运算结果不可避免地堆聚起越来越多的误差。
      参考资料

    如何解决

    1. 利用四舍五入来限制精度
    	var v=(0.1+0.3).toFixed(3)//保留小数点后3位
    			alert(v)//弹0.300
    

    这种方法虽然可以解决问题,但也存在一定的局限性,比如说我想要计算5位小数,那它不就歇菜了,没关系我们再说一种刚刚学到的操作】

    2. 小数转正数进行计算

    既然精度问题是由于小数转换时的位数变化引起的,那么我们就直接将小数化为整数进行运算,算完之后再将它转回去,不就可以了

    • 加法
    //加法
    		Number.prototype.add = function(arg) {
    			var r1, r2, m;
    			try {
    				r1 = this.toString().split(".")[1].length
    			} catch (e) {
    				r1 = 0
    			}
    			try {
    				r2 = arg.toString().split(".")[1].length
    			} catch (e) {
    				r2 = 0
    			}
    			m = Math.pow(10, Math.max(r1, r2))
    			return (this * m + arg * m) / m
    		}
    
    • 减法
    		//减法
    		Number.prototype.sub = function(arg) {
    			return this.add(-arg);
    		}
    
    • 乘法
    		//乘法
    		Number.prototype.mul = function(arg) {
    			var m = 0,
    				s1 = this.toString(),
    				s2 = arg.toString();
    			try {
    				m += s1.split(".")[1].length
    			} catch (e) {}
    			try {
    				m += s2.split(".")[1].length
    			} catch (e) {}
    			return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
    		}
    
    • 除法
    		//除法
    		Number.prototype.div = function(arg) {
    			var t1 = 0,
    				t2 = 0,
    				r1, r2;
    			try {
    				t1 = this.toString().split(".")[1].length
    			} catch (e) {}
    			try {
    				t2 = arg.toString().split(".")[1].length
    			} catch (e) {}
    			with(Math) {
    				r1 = Number(this.toString().replace(".", ""))
    				r2 = Number(arg.toString().replace(".", ""))
    				return (r1 / r2) * pow(10, t2 - t1);
    			}
    		}
    // 			5674.784   t1 3    r1*1000  5674784   
    // 			0.323342   t2 6    r2*1000000  0323342	
    

    这个算法还是比较好理解的,整理下来方便以后使用
    这篇博客从数据结构上给出了分析,可以参考

    展开全文
  • 本题的关键在随意取个数, 因此和以前解过的true or false问题思路一样.网上一搜才发现这是一类问题, 称01背包问题 我们可以使用递归来列举出所有的排列组合情况,共有2的n次方中情况, 然后筛选其中和为m的排列...
  • 在程序设计竞赛中就必须要设计出一种更好的算法要求能在秒钟甚至一秒钟之内找出n以内的所有素数。于是就有了素数筛法。 (我表达得不清楚的话不要骂我,见到我的时候扁我一顿我不说一句话。。。) 素数筛法是...
  • 这一行:if not x:必须改为别的东西解决方案有种方法可以解决这个问题。我只是从我认为是最好的解决方案列出到最后可能的解决方案:>处理所有可能的有效情况。因为平方根应该自然地期望一个数字输入,排除复数...
  • 天有位朋友找我,说:“老哥,老哥,我好像发现了Integer一个bug,你帮我看看什么情况?”,说完给了我两个很简单的demo,上代码。 100 == 100 1000 == 1000 通过代码,我们可以看到,这是很简单的“100100”...
  • MongoDB Query 的个方法

    千次阅读 2018-04-28 09:47:00
    Query.All("name", "a", "b");//通过多个元素来匹配数组Query.And(Query.EQ("name", "a"), Query.EQ("title", "t"));...//等于Query.Exists("type", true);//判断键值是否存在Query.GT("value", 2);//大于>Que
  • a==b //true a===b //false 但是为什么呢?看了很多书,问了好个大神,其实自己还是稀里糊涂的。这里记录一下,备查。 在js中,区分原始资料类型和包装类型。数字、字符串、布尔、null、undefined 属于原始资料...
  • 天有位朋友找我,说:“老哥,老哥,我好像发现了Integer一个bug,你帮我看看什么情况?”,说完给了我两个很简单的demo,上代码。100 == 1001000 == 1000通过代码,我们可以看到,这是很简单的“100==100”、...
  • 在IE浏览器下,一般的ajax的方法都是cache等于true的,下面有个不错的解决方法,感兴趣的朋友可以参考下
  • 转换为true 转换为false Boolean true false string 任何非空字符串 ‘’(空字符串) Number 任何非零的数字值(包括无穷大) 0和NaN Object 任何对象 null 操作符: 2个等于号判断的是值 3个等于号判断的是...
  • 等值检测运算符包括 4个,详细说明如表所示。 等值检测运算符 等值检测运算符 说明 ==(相等) 比较两个操作数的值是否...如果操作数是布尔值,则先转换为数值,其中false转为 0,true转换为 1。 如果...
  • Erlang 有好种运算符,比较运算符、数学运算符、布尔运算符,文章针对这种运算符做讨论,参考erlang文档,以例子说明。 Erlang的比较运算符 写法如下: Expr1 op Expr2 1&gt; 1 == 1. true ...
  • 它返回的结果是InternetGetConnectedState(ref dwFlag, 0)(后面简称IGC)等于true,且为代理服务器上网。 2·你的电脑连接了一个无法冲浪的wifi,IGC结果等于true。 3·官方不推荐使用这种方法,因为这种方法查询...
  • JavaScript中的种继承方式: 一:原型链  让原型对象等于另一个类型的实例.此时,原型对象包含一个指向另一个原型的指针,相应地,另一个原型中也包含着指向另一个构造函数的指针.  function A(){  this....
  • true</item>,效果明显直接进入项目,白屏消失了。 但是也有其他的问题出现,项目从后台杀掉再打开项目会变得反应很慢,过秒才进入 给人卡顿的感觉。 解决方法:设置windowBackground,等于是用一张图片...
  • js去重的种方法

    2020-09-15 20:20:29
    arr数组里面是否包含item这个元素,返回true或者false,与arr.indexOf(item) === -1相反(等于-1说明不包含这个元素) let arr =[1,2,3,3,2,1] var newArr = []; for(var i in arr){ !newArr.includes(arr[i]) &...
  • 方法一:将对象转换成字符串,再判断是否等于“{}” let obj={}; console.log(JSON.stringfy(obj)==="{}"); //返回true 方法二:for in循环 let result=function(obj){ for(let key in obj){ return false;//...
  •  printf("true\n");  else  printf("false\n");  实际上执行的是  1.3==1 为假,  2.5 & 0=0  3. if (0) 执行 false  (==的运算符优先级大于&)  如果判断5 & 3是否等于1,应该是这样...
  • 下面这些方法是判断数组的种方法: 1、instanceof运算符 主要是判断某个实例(arr)是否属于某个对象。 let arr = [1,2,3]; console.log(arr instanceof Array); //true 2、constructor 判断实例(arr)的构造函数...
  • 注意:通过判断子的checkbox只要有一个没有点击,总的checkbox就等于false,设置一个变量isBtnAll来存储这个变量,默认设置为true。 反选: 全选: 全不选: 转载于:...
  • js中种继承方式

    2017-05-07 15:57:16
    假如,我们让原型对象等于另一个类型的实例,显然,此时原型对象将包含指向另一个类型的指针,相应的,另一个原型中也包含指向另一个构造函数的指针。 function SuperType() { this.property=true; } Supe
  • 给定一个二叉树和一个目标和,判断该是否存在树的根节点到叶子节点的路径,这条路经上的所有经过的节点和等于目标和 思路:用递归的思想,深度优先的思想,先判断经过节点的所有左子节点的和,在判断右子节点,如下...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 306
精华内容 122
关键字:

true等于几