无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5823|回复: 2
打印 上一主题 下一主题

[分享][转帖]批处理set命令中的算数运算符和逻辑运算符,新手请看

[复制链接]
跳转到指定楼层
1#
发表于 2012-3-14 14:19:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
转自CN-DOS论坛,顺便把一些乱七八糟的带上来了

-------------------------------------------
批处理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
-------------------------------------------------
什么叫进制
当我们用数字表示数量时,存在一个问题:
我们要表示的事物的量可能很大,数字的数量是有限的,如何用有限的数字表示

很多的数量?
有效的办法就是把数字连起来,利用数字位置的不同来表示他所代表的数量
,如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,算减法也要当加法算,减法怎么算的我以后在说
------------------------------------------------------
可能会先算 3*2^2+3

11---乘以2^2--->1100

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

11---乘以2^2--->1100

1100+11=1111 (15)
------------------------------------------------------
什么叫补码
负数的表示法
负数要表示成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
下一讲要讲逻辑运算符和算术运算符
----------------------------------------------------------
^运算符
转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

----------------------------------------------
13的二进制下面讲讲负数的补码怎么转化成数值,以11110010为例,首先按位取反变成00001101,在加一,变成00001110,转化成二进制的14,在加-,变成-14
负数的补码转换成数值的规律是取反加1,再加负号
是1101,前面补上0000,变成00001101,在按位取反,变成11110010,这是个补码,转换成十进制,变成-14
--------------------------------------------------
2#
发表于 2012-3-14 14:33:33 | 只看该作者
这个教程很实用的啊支持了啊。
回复

使用道具 举报

3#
发表于 2012-3-23 17:53:33 | 只看该作者
太有用了,谢谢分享……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-1 03:22

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表