中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理set命令中的算数运算符和逻辑运算符,新手请看
作者:
标题: 批处理set命令中的算数运算符和逻辑运算符,新手请看 上一主题 | 下一主题
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『楼 主』:  批处理set命令中的算数运算符和逻辑运算符,新手请看

批处理set命令中的算数运算符和逻辑运算符,新手请看 Dos下的写法 批处理中的写法 符号的含义和取值范围 按位异或:num1^^num2 num1^^num2 转2进制补码,按位判断,相异为1,相同为0,转10进制输出, 按位与: num1^&num2 num1^&num2 转2进制补码,按位判断,全1为1,否则为0,转10进制输出 按位或: num1^|num2 num1^|num2 转2进制补码,按位判断,全0为0,否则为1,转10进制输出 加: num1+num2 num1+num2 减: num1-num2 num1-num2 乘: num1*num2 num1*num2 除: num1/num2 num1/num2 结果向零取整,num2不为0 求余: num1%num2 num1%%num2 num2不为0,num2为负数当同绝对值的正数处理,num2为负数时当正数计算,然后结果取负 按位取反:~num ~num 转2进制,1变成0,0变成1,以补码的十进制形式输出 逻辑非: !num !num num为0输出1,不为0输出0 求负: -num -num 逻辑左移:num1^<^<num2 num1^<^<num2 转2进制补码,num1所有位向左移num2个位数,移几位后面填几个0,转十进制输出,num2为负时输出0 逻辑右移:num1^>^>num2 num1^>^>num2 转2进制补码,num1所有为向右移num2个位数,转十进制输出,num2为负时输出0


   此帖被 +11 点积分        点击查看详情   
评分人:【 everest79 分数: +11  时间:2008-2-11 16:36


2008-2-11 15:22
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 2 楼』:  

一些命令是二进制的,楼主套上二进制例子可能会更好点


2008-2-11 16:40
查看资料  发短消息  网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 3 楼』:  

好建议,需要把二进制基础知识的讲解加上,要不然新手(我也是了……)不知道什么叫补码,什么叫进制,我需要筹备这方面的教程了


2008-2-11 16:46
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 4 楼』:  

加油


2008-2-11 17:01
查看资料  发短消息  网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 5 楼』:  

什么叫进制 当我们用数字表示数量时,存在一个问题: 我们要表示的事物的量可能很大,数字的数量是有限的,如何用有限的数字表示 很多的数量? 有效的办法就是把数字连起来,利用数字位置的不同来表示他所代表的数量 ,如123中的1代表100,2代表20,1代表1 初步理解,进制就是我们表是一个完整的正整数集需要的字符的数量 十进制:我们用的最多,他用了123456790十个数字 二进制:用了1 和0两个数字,计算机使用二进制是依赖于电路的基本结构,可以说是“被迫”使用(有关资料说,3进制是“最优秀的”,可惜在大型集成电路上很难实现)要了解计算机,第一步就是了解2进制 下面列举几个2进制数 111010001 110001100 看到了吧?只有1和0(别问我为什么2进制没有2?,我晕!) 加发运算和十进制类似,上过小学的都会,无非是满2进1! 算乘法就是算加法,3乘5,计算机就计算3+3+3+3+3,计算机是不是很笨?只认识0和1,算减法也要当加法算,减法怎么算的我以后在说


2008-2-11 17:48
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 6 楼』:  

可能会先算 3*2^2+3 11---乘以2^2--->1100 1100+11=1111 (15)


2008-2-11 18:17
查看资料  发短消息  网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 7 楼』:  

什么叫补码 负数的表示法 负数要表示成2进制怎么半呢?你会说,那就在前面加个负号。问题是计算机只认 识1和0啊,负号怎么表示呢?于是有人提出在2进制数字的前面加上1代表负数 加上0代表正数。这样表示很直观,但是有个问题,0怎么表示?存在两个零,正 的零等于负的零,就因为这两个零给数据运算带来了很大的麻烦,我们才引进了 “补码”的概念。“补码”里只有一个零,每个单一数值和唯一编码相对应,才 符合计算机运算的要求。 正数的补码和原码一致,0的补码是0000000,负数的补码是他相反数逐位取反再 加一 比如1的源码表示为00000001,逐位取反后变成了11111110,(称为反码),在加 1 就变成了11111111,这个11111111就表示负1 还有一种方法理解11111111表示-1:0不是表示为0000000吗,那0减去1 就表示-1 了,什么?不够减?向想象中的第九位借位(暂时不要考虑高位的问题),结果 出来了11111111,那负2呢?-1在减1被,你看: 11111111在减1等于11111110,其他的负数聪明的读者,你会表示了吗? 在这里要注意一个特殊的数:-128,表示成10000000 -129呢?很抱歉在八个位数的二进制中无法表式,需要用十六位二进制数表式如 下1111111101111111这个数再加1就是1111111110000000也就是-128 有人要问了,10000000和1111111110000000不同啊,怎么表是同样的数? 那我们用正数的时候00000001和1都表示1,1前面的全零串没有意义 负数正好相反,零前面的全1串没有意义,相加多少都行 我举例子的时候用的都是8位的和16位的,8位组成一个字节,表式一个数最少用8 位,数字再大就用16位,再就是18位的。反正是8的倍数。 在数字前面加上若干零或者1的过程,我们叫它“扩展到高位字节” 上个帖子提到了怎么算减法,就是把减正看成加负,负数一律表示成补码 ,补码不分正负,只要相加就行了,简单吧? 这一讲最后说说取值范围:一个8位能表示2的8次方个数,就是256 一个16位能表示65536个数 我们不需要表示负数的时候使用“无符号数”8位的取值范围是0~255,16位的取 值范围是0~65535.无符号数就是不用补码的数 我们需要表示负数的时候要用“有符号数”8位的取值范围是-128~127,16位的取 值范围是-32768~32767 下一讲要讲逻辑运算符和算术运算符


2008-2-11 18:56
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 8 楼』:  

…… 2进制在BAT里应用不多哦~ 不过了解当然好。


2008-2-11 19:18
查看资料  发短消息  网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 9 楼』:  

Originally posted by pinghu at 2008-2-11 03:22 PM: 批处理set命令中的算数运算符和逻辑运算符,新手请看 Dos下的写法 批处理中的写法 符号的含义和取值范围 按位异或:num1^^num2 num1^^num2 转2进制补码,按位判断,相异为1,相同为0,转10进制输出, 按位与: num1^&num2 num1^&num2 转2进制补码,按位判断,全1为1,否则为0,转10进制输出 按位或: num1^|num2 num1^|num2 转2进制补码,按位判断,全0为0,否则为1,转10进制输出 加: num1+num2 num1+num2 减: num1-num2 num1-num2 乘: num1*num2 num1*num2 除: num1/num2 num1/num2 结果向零取整,num2不为0 求余: num1%num2 num1%%num2 num2不为0,num2为负数当同绝对值的正数处理,num2为负数时当正数计算,然后结果取负 按位取反:~num ~num 转2进制,1变成0,0变成1,以补码的十进制形式输出 逻辑非: !num !num num为0输出1,不为0输出0 求负: -num -num 逻辑左移:num1^<^<num2 num1^<^<num2 转2进制补码,num1所有位向左移num2个位数,移几位后面填几个0,转十进制输出,num2为负时输出0 逻辑右移:num1^>^>num2 num1^>^>num2 转2进制补码,num1所有为向右移num2个位数,转十进制输出,num2为负时输出0
^运算符 转2进制补码,按位判断,相异为1,相同为0,转10进制输出 10 ^ 8 = 2 00001010 ^ 00001000 = 00000010 &运算符 转2进制补码,按位判断,全1为1,否则为0,转10进制输出 10 & 8 = 8 00001010 & 00001000 = 00001000 |运算符 转2进制补码,按位判断,全0为0,否则为1,转10进制输出 10 | 8 = 10 00001010 | 00001000 = 00001010 >>运算符 转2进制补码,num1所有位向左移num2个位数,移几位后面填几个0,转十进制输出,num2为负时输出0 10 >>1 = 5 00001010 >>1 = 00000101 <<运算符 转2进制补码,num1所有为向右移num2个位数,转十进制输出,num2为负时输出0 10 <<1 = 20 00001010 >>1 = 000010100 ~比较难理解,那位达人举个直观点的例子来,楼上的没看明白


2008-2-12 15:55
查看资料  发短消息  网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 10 楼』:  

13的二进制是1101,前面补上0000,变成00001101,在按位取反,变成11110010,这是个补码,转换成十进制,变成-14 另外楼上的部分运算符写法有误,不要把^^写成^,其他的符号的正确写法参照一楼的,if /?中的帮助中有错误, 下面讲讲负数的补码怎么转化成数值,以11110010为例,首先按位取反变成00001101,在加一,变成00001110,转化成二进制的14,在加-,变成-14 负数的补码转换成数值的规律是取反加1,再加负号 例子不错,谢谢你的补充,就是运算符写错了 有什么我没讲清楚的请回帖


2008-2-12 18:38
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 11 楼』:  

楼上讲的是~的用法啊,忘说了


2008-2-12 18:40
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: