找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27943|回复: 5

[数值计算] [已解决]批处理为何这样用set能计算2的几次方?

[复制链接]
发表于 2010-7-20 17:08:34 | 显示全部楼层 |阅读模式
  1. @echo off
  2. set /p n=请输入2 的几次方:
  3. set /a num=1^<^<n
  4. echo %num%
  5. pause
复制代码
想一下这个到底是怎么运算的?

评分

参与人数 1PB +2 收起 理由
CrLf + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2010-7-20 17:20:26 | 显示全部楼层
自己set /?

/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式
评估器很简单并以递减的优先权顺序支持下列操作:

    ()                  - 分组
    ! ~ -               - 一元运算符
    * / %               - 算数运算符
    + -                 - 算数运算符
    << >>               - 逻辑移位
                       - 按位“与”
    ^                   - 按位“异”
    |                   - 按位“或”
    = *= /= %= += -=    - 赋值
      &= ^= |= <<= >>=
    ,                   - 表达式分隔符
.....

评分

参与人数 1PB +2 收起 理由
CrLf + 2 乐于助人

查看全部评分

发表于 2010-7-20 17:52:10 | 显示全部楼层
<<运算符是位操作运算符  计算机里保存形式为2进制  比如1<<2,就是1后面加2个0,再把100转为10进制就是4

评分

参与人数 1PB +2 收起 理由
CrLf + 2 乐于助人

查看全部评分

 楼主| 发表于 2010-7-20 22:53:49 | 显示全部楼层

我弄了个新的

  1. @echo off
  2. :x
  3. set /p t=输入
  4. set /a e=1 "<<" %t%
  5. echo %e%
  6. goto x
  7. pause
复制代码
发表于 2010-7-20 23:14:36 | 显示全部楼层
比如:0000 0001是1,0000 0010是2,0000 0100是4;0000 0011是3,0000 0110是6,代表的是3*2
x<<y的意思就是x乘2的Y次方,
移位分左和右,左移把最高位去掉,最低位补0,右移则相反,但是机器运算有长度限制,当超过最大可运算数后会出现错误,假设某运算器的最大数是1111 1111,则1000 0000左移后则是0000 0000,此时就出错了

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

发表于 2011-8-5 15:51:17 | 显示全部楼层
  1. @echo off
  2. :x
  3. set /p n=请输入2 的几次方:
  4. set /a num=1 "<<"n
  5. echo %num%
  6. goto x
  7. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 04:47 , Processed in 0.024368 second(s), 11 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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