中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [分享]位运算演示 上一主题 | 下一主题
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『楼 主』:  [分享]位运算演示

找不见了,重新发...

以前自己写的一个位运算演示的代码(函数的调用改为netbenton的方法),现拿出来和大家分享一下,希望能让初学者对位运算有更深刻的认识...
@echo off
title 位运算示例   code by:cn-dos-moniuming
echo.
echo.位运算名词解释(个人理解):
echo.
echo.位运算: 按操作数在计算机内表示的二进制数逐位进行逻辑运算或移位运算.
echo.与(^&):   全部都是1才为1(指返回值,下同),否则为0.
echo.或(^|):   只要有1则为1,否则为0.
echo.异或(^^): 不同为1,相同为0.
echo.取反(~): 是1则0,是0则1(单目运算符).
echo.取负(-): 先取反再加1(单目运算符).
echo.左移n位(^<^<n): 相当于乘以2的n次方(用0补位).
echo.右移n位(^>^>n): 相当于除以2的n次方(负数用1补位,正数用0补位).
echo.
echo.下面的示例是在三十二位系统(数值范围:-2147483648~2147483647)下运行的结果.
echo.请输入批处理能处理的数值(整数),否则将不能正确处理.如发生溢出,结果也不会正确.
echo.
rem 将十进制转换为二进制的函数.
set "fun_d2b=setlocal enabledelayedexpansion&(for /l %%a in (0 1 31) do (set /a "str=!#a#!^>^>%%a"&set /a "str^&=1"&set "str_d2b=!str!!str_d2b!"))&(for %%a in (!str_d2b!) do (endlocal&set #a#=%%a))"
setlocal enabledelayedexpansion
:agn
set in=&set /p in=请输入两个数(中间用空格隔开,回车退出):
if not defined in exit
set n=0
for %%a in (%in%) do (
   set /a n+=1
   set /a num!n!=%%a 2>nul
)
cls
echo.输入的两个数的有效数值为: "!num1!" 和 "!num2!", 用二进制表示分别为:
set /a str1=num1,str2=num2
%fun_d2b:#a#=str1%
%fun_d2b:#a#=str2%
echo.&echo.!str1!  ==^> !num1!
echo.!str2!  ==^> !num2!
echo.&echo.各种位运算的结果如下:
set /a "num=!num1!&!num2!,t=num"
%fun_d2b:#a#=num%&echo.&echo.!num! ==^> 按位与:   !num1! ^& !num2! = !t!
set /a "num=!num1!|!num2!,t=num"
%fun_d2b:#a#=num%&echo.&echo.!num! ==^> 按位或:   !num1! ^| !num2! = !t!
set /a "num=!num1!^^!num2!,t=num"
%fun_d2b:#a#=num%&echo.&echo.!num! ==^> 按位异或: !num1! ^^^^ !num2! = !t!
set /a "num=~!num1!,t=num"
%fun_d2b:#a#=num%&echo.&echo.!num! ==^> 按位取反:    ~(!num1!) = !t!
set /a "num=-!num1!,t=num"
%fun_d2b:#a#=num%&echo.&echo.!num! ==^> 取负:        -(!num1!) = !t!
set /a "ran=%random%%%5+2,num=!num1!,num<<=ran,t=num"
%fun_d2b:#a#=num%&echo.&echo.!num! ==^> 左移!ran!位:   !num1! ^<^< !ran! = !t!
set /a "ran=%random%%%5+2,num=!num1!,num>>=ran,t=num"
%fun_d2b:#a#=num%&echo.&echo.!num! ==^> 右移!ran!位:   !num1! ^>^> !ran! = !t!
echo.&goto :agn


   此帖被 +15 点积分         点击查看详情   
评分人:【 plp626 分数: +15  时间:2009-10-12 18:19


2009-10-12 00:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 2 楼』:  

不说了,直接加分,我刚来论坛时,若有这样的帖子一定少走不少弯路



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2009-10-12 18:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zgq0301
新手上路





积分 3
发帖 2
注册 2009-11-11
状态 离线
『第 3 楼』:  

好帖,谢谢楼主热情分享。
收藏慢慢研究

2009-11-16 11:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: