返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >bat批处理位运算实例代码
  • 186
分享到

bat批处理位运算实例代码

2024-04-02 19:04:59 186人浏览 独家记忆
摘要

发现很多新手对于批处理中set/a的位运算的概念有点模糊,我也是,什么“异、或、与、逻辑移位”,看的云里雾里,头脑发胀,于是就有了下面的代码。 @echo off if "%~1

发现很多新手对于批处理中set/a的位运算的概念有点模糊,我也是,什么“异、或、与、逻辑移位”,看的云里雾里,头脑发胀,于是就有了下面的代码。


@echo off
if "%~1" equ "" exit/b
:begin
setlocal enabledelayedexpansion
set "Var=0123456789ABCDEF"
set/p number=Input: 
if /i "%number%" equ "cls" cls&endlocal&Goto begin
if "%~1" equ ">>" (set "s=!number: ="^>^>"!") else (
    if "%~1" equ "<<" (set "s=!number: ="^<^<"!") else (
       set "s=!number: ="^%~1^"!"
))
set/a s=!s!
for %%a in (%number% %s%) do (
     set/a num=%%a,y+=1
     set "bin="
     call :loop
     if !y! equ 2 (set "str=                  (%~1) %%a") else (set "str=                         %%a")
     set "bin=00000000000000000000000000000!bin!"
     if !y! equ 3 echo      ------------------------------------------------------
     echo  !str:~-15!  ^(bin^) !bin:~-30!
)
endlocal
echo.&goto begin
:loop
set/a Mod=Num%%2,Num/=2
call,set "bin=%%Var:~%Mod%,1%%%bin%"
if %Num% neq 0 goto loop

使用见图:

此批处理没有对输入信息进行排错处理,所以不要输入08、09、0x9k abc这类无效的文字。

第一次运行时,务必输入参数,比如你想知道>>右移运算,就打开CMD,输入:批处理名字 ">>",此后输入的信息,都会执行>>右移运算,若要进行其他运算,CTRL+C终止,重新运行此批处理。

如果要进行^位相异运算,就输入 批处理名字 "^",同上。
运算符因为都是特殊字符,所以要加""闭合。

例:比如想知道19"&"2的运算信息,就打开CMD,输入 批处理名字 "&"
等待提示input,输入: 19 2 回车,便会出现19"&"2的运算结果。
&---与,转为2进制,对应位上相乘。
其他同样的道理,希望能从结果中总结出各位运算符的含义。

批处理位运算难道与编程语言的位运算有什么不同吗?符号不同罢了

只是很多人根本没有接触过“位运算”这个概念而已,甚至连“二进制”的概念都没有

其实一般的计算机基础类书籍都有介绍的,比如基本的反码、补码的概念,估计很多人都略过了(汗一个,最初我也是这样)

闲扯原码、反码、补码

相信大家看到这个标题都不屑一顾,因为在任何一本计算机基础知识书的第一章都有他们的解释,但是在书上我们只能找到一些简单的定义,没次看过之后不久就忘了。最近论坛里有人问起这些概念,看到很多人的回复是以前看过现在忘了去看看某某书之类,很少有给出一个合理的解释。于是本人就开始思考(虽然上帝会发笑,我还是要思考。),于是得出了以下的结论。

数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,"正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚."(摘自<<数学发展史>>有空大家可以看看哦~,很有意思的).为了能方便的与二进制转换,就使用了十六进制(2 4 )和八进制(2 3 ).下面进入正题.

数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为

(-127~-0 +0~127)共256个.

有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits

( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 = ( 0 )10

(00000001)原 + (10000001)原 = (10000010)原 = ( -2 ) 显然不正确.

因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算:

( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10= ( 0 )10

(00000001) 反+ (11111110)反 = (11111111)反 = ( -0 ) 有问题.

( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = ( -1 )10

(00000001) 反+ (11111101)反 = (11111110)反 = ( -1 ) 正确

问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).

于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:

(-128~0~127)共256个.

注意:(-128)没有相对应的原码和反码, (-128) = (10000000) 补码的加减运算如下:

( 1 ) 10- ( 1 ) 10= ( 1 )10 + ( -1 )10 = ( 0 )10

(00000001)补 + (11111111)补 = (00000000)补 = ( 0 ) 正确

( 1 ) 10- ( 2) 10= ( 1 )10 + ( -2 )10 = ( -1 )10

(00000001) 补+ (11111110) 补= (11111111)补 = ( -1 ) 正确

所以补码的设计目的是:

⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.

⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计

所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。看了上面这些大家应该对原码、反码、补码有了新的认识了吧!

--结束END--

本文标题: bat批处理位运算实例代码

本文链接: https://lsjlt.com/news/135740.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • bat批处理位运算实例代码
    发现很多新手对于批处理中set/a的位运算的概念有点模糊,我也是,什么“异、或、与、逻辑移位”,看的云里雾里,头脑发胀,于是就有了下面的代码。 @echo off if "%~1...
    99+
    2024-04-02
  • 批处理位运算演示代码
    在论坛里看到netbenton的那个不用call调用函数的帖子(下面贴有链接)后,突然记起以前自己写的一个位运算演示的代码(用call来调用函数,现改用netbenton的方法另类的...
    99+
    2024-04-02
  • Java的位运算实例代码分析
    今天小编给大家分享一下Java的位运算实例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。位运算很久以前学习过位运算,...
    99+
    2023-07-06
  • 批处理BAT加强函数代码怎么用
    小编给大家分享一下批处理BAT加强函数代码怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!##################################...
    99+
    2023-06-09
  • 批处理bat如何递归计算N!
    这篇文章主要介绍了批处理bat如何递归计算N!,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。核心代码:@echo offsetlocal enablede...
    99+
    2023-06-08
  • BAT批处理提取系统时间的实现代码(bug修复)
    一般情况下用下面的代码即可,但批处理的默认0开头的数字以为是8进制,导致获取的时间不准确 for /f "tokens=1,2 delims=:" %%i in ('time/t...
    99+
    2024-04-02
  • Python除法运算和幂运算代码实例
    “//”运算除法运算符是“/”,这个人人皆知道,但是这个二元运算符“/”求出来的结果都是取决于操作数本身的20 / 3620 / 3.06.66666666666666720.0 / 36.66666666666666720.0 / 3...
    99+
    2023-01-31
    除法 实例 代码
  • BAT批处理脚本的示例分析
    这篇文章主要为大家展示了“BAT批处理脚本的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“BAT批处理脚本的示例分析”这篇文章吧。第一章 批处理基础第一节 常用批处理内部命令简介批处理定...
    99+
    2023-06-08
  • bat批处理 if 命令示例详解
    if命令是批处理中常用的条件判断命令,可以根据条件的满足与否执行不同的操作。下面是一些if命令的示例及详解:1. 检查两个值是否相等...
    99+
    2023-08-11
    bat
  • 使用bat批处理的示例分析
    这篇文章将为大家详细讲解有关使用bat批处理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。删除默认共享(别存为bat文件放在开始菜单中):net_share_delete.bat,删除默认共享的...
    99+
    2023-06-09
  • 如何实现批处理获取IP生成TXT文本的bat代码
    这篇文章主要介绍如何实现批处理获取IP生成TXT文本的bat代码,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!第一种方法:代码如下:@echo off <"%~f0" more +5 >...
    99+
    2023-06-08
  • 如何实现批处理蠕虫bat
    这篇文章主要介绍了如何实现批处理蠕虫bat,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。代码如下:@echo off  attrib ...
    99+
    2023-06-09
  • 如何实现批处理加密.bat
    这篇文章给大家分享的是有关如何实现批处理加密.bat的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码如下:%%a %%a %%a %%a %%a %%a&nbs...
    99+
    2023-06-09
  • 如何实现恶意批处理.bat
    这篇文章主要介绍如何实现恶意批处理.bat,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!@echo off title You DEAD!!!!!!! set&nbs...
    99+
    2023-06-09
  • 如何实现批处理bat后门
    这篇文章将为大家详细讲解有关如何实现批处理bat后门,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码如下:@echo off     @att...
    99+
    2023-06-09
  • 如何使bat批处理以管理员权限运行
    这篇文章给大家分享的是有关如何使bat批处理以管理员权限运行的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、第一种方法有的电脑是非管理员登录,运行程序时,需要提示是否运行运行。解决方法如下:@ ech...
    99+
    2023-06-08
  • 用bat实现定时执行任务的批处理文件代码分享
    这篇文章主要讲解了“用bat实现定时执行任务的批处理文件代码分享”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“用bat实现定时执行任务的批处理文件代码分享”吧!@echo off&...
    99+
    2023-06-09
  • MySQL自动安装批处理脚本实例代码
    前言 作为强迫症患者,安装mysql时必须使用zip模式安装,我的电脑我做主,但是问题来了,手动安装确实麻烦,我们不可能记住每一步操作,所以我自己写了一个批处理,供大家参考。 MySQL5.7版本以上和MySQL5.7版...
    99+
    2024-04-02
  • bat命令批处理如何判断32位还是64位系统
    这篇文章主要为大家展示了“bat命令批处理如何判断32位还是64位系统”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“bat命令批处理如何判断32位还是64位系统”这篇文章吧。第一种代码:通过 %...
    99+
    2023-06-08
  • 如何实现干掉进程并删除源文件的批处理bat代码
    小编给大家分享一下如何实现干掉进程并删除源文件的批处理bat代码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!双击运行后,输入进程名称批处理代码:代码如下:@&n...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作