ABAP语言实现 左移 <<、无符号右移 >>> 位移操作

index_inner TYPE i,
index TYPE i,
END OF index_map .
CLEAR: index_map[].
index_map-index_inner = 1.
index_map-index = 8.
APPEND index_map.
index_map-index_inner = 2.
index_map-index = 7.
APPEND index_map.
index_map-index_inner = 3.
index_map-index = 6.
APPEND index_map.
index_map-index_inner = 4.
index_map-index = 5.
APPEND index_map.
index_map-index_inner = 5.
index_map-index = 4.
APPEND index_map.
index_map-index_inner = 6.
index_map-index = 3.
APPEND index_map.
index_map-index_inner = 7.
index_map-index = 2.
APPEND index_map.
index_map-index_inner = 8.
index_map-index = 1.
APPEND index_map.
index_map-index_inner = 9.
index_map-index = 16.
APPEND index_map.
index_map-index_inner = 10.
index_map-index = 15.
APPEND index_map.
index_map-index_inner = 11.
index_map-index = 14.
APPEND index_map.
index_map-index_inner = 12.
index_map-index = 13.
APPEND index_map.
index_map-index_inner = 13.
index_map-index = 12.
APPEND index_map.
index_map-index_inner = 14.
index_map-index = 11.
APPEND index_map.
index_map-index_inner = 15.
index_map-index = 10.
APPEND index_map.
index_map-index_inner = 16.
index_map-index = 9.
APPEND index_map.
index_map-index_inner = 17.
index_map-index = 24.
APPEND index_map.
index_map-index_inner = 18.
index_map-index = 23.
APPEND index_map.
index_map-index_inner = 19.
index_map-index = 22.
APPEND index_map.
index_map-index_inner = 20.
index_map-index = 21.
APPEND index_map.
index_map-index_inner = 21.
index_map-index = 20.
APPEND index_map.
index_map-index_inner = 22.
index_map-index = 19.
APPEND index_map.
index_map-index_inner = 23.
index_map-index = 18.
APPEND index_map.
index_map-index_inner = 24.
index_map-index = 17.
APPEND index_map.
index_map-index_inner = 25.
index_map-index = 32.
APPEND index_map.
index_map-index_inner = 26.
index_map-index = 31.
APPEND index_map.
index_map-index_inner = 27.
index_map-index = 30.
APPEND index_map.
index_map-index_inner = 28.
index_map-index = 29.
APPEND index_map.
index_map-index_inner = 29.
index_map-index = 28.
APPEND index_map.
index_map-index_inner = 30.
index_map-index = 27.
APPEND index_map.
index_map-index_inner = 31.
index_map-index = 26.
APPEND index_map.
index_map-index_inner = 32.
index_map-index = 25.
APPEND index_map.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form lshfit_i
*&---------------------------------------------------------------------*
* 整型左移
*----------------------------------------------------------------------*
* -->I 待位移的数
* -->PLACES 移几位
* -->I2 位移后的数
*----------------------------------------------------------------------*
FORM lshfit_i USING i TYPE i places TYPE i i2 TYPE i.
DATA: start1 TYPE i ,start2 TYPE i.
DATA: b TYPE n.
DATA: i3 TYPE i.
FIELD-SYMBOLS: <i3> TYPE x.
FIELD-SYMBOLS: <i> TYPE x.
FIELD-SYMBOLS: <p> TYPE x.
DATA: _31(4) TYPE x,p TYPE i.
p = places.
IF places < 0.
_31 = '1F000000'.
ASSIGN p TO <p> CASTING.
<p> = <p> BIT-AND _31.
ENDIF.
i2 = i.
ASSIGN i2 TO <i> CASTING.
IF p = 24 OR p = 16 OR p = 8.
p = p / 8.
SHIFT <i> BY p PLACES RIGHT IN BYTE MODE.
ELSE.
ASSIGN i3 TO <i3> CASTING.
start1 = 32 - p.
WHILE start1 >= 1.
READ TABLE index_map INDEX start1.
GET BIT index_map-index OF <i> INTO b.
IF b = 1.
start2 = start1 + p.
READ TABLE index_map INDEX start2.
SET BIT index_map-index OF <i3> TO b.
ENDIF.
start1 = start1 - 1.
ENDWHILE.
<i> = <i3>.
ENDIF.
ENDFORM. "lshfit_i
*&---------------------------------------------------------------------*
*& Form rshfit_i
*&---------------------------------------------------------------------*
* 整型右移
*----------------------------------------------------------------------*
* -->I 待位移的数
* -->PLACES 移几位
* -->I2 位移后的数
*----------------------------------------------------------------------*
FORM rshfit_i USING i TYPE i places TYPE i i2 TYPE i.
DATA: start1 TYPE i ,start2 TYPE i.
DATA: b TYPE n.
DATA: i3 TYPE i.
FIELD-SYMBOLS: <i3> TYPE x.
FIELD-SYMBOLS: <i> TYPE x.
FIELD-SYMBOLS: <p> TYPE x.
DATA: _31(4) TYPE x,p TYPE i.
DATA multiplier TYPE i.
p = places.
IF p < 0.
_31 = '1F000000'.
ASSIGN p TO <p> CASTING.
<p> = <p> BIT-AND _31.
ENDIF.
i2 = i.
ASSIGN i2 TO <i> CASTING.
IF p = 24 OR p = 16 OR p = 8.
p = p / 8.
SHIFT <i> BY p PLACES LEFT IN BYTE MODE.
ELSE.
IF i >= 0 AND p < 31 .
multiplier = 2 ** p.
i2 = i DIV multiplier.
ELSE.
ASSIGN i3 TO <i3> CASTING.
start1 = p + 1.
WHILE start1 <= 32.
READ TABLE index_map INDEX start1.
GET BIT index_map-index OF <i> INTO b.
IF b = 1.
start2 = start1 - p.
READ TABLE index_map INDEX start2.
SET BIT index_map-index OF <i3> TO b.
ENDIF.
start1 = start1 + 1.
ENDWHILE.
<i> = <i3>.
ENDIF.
ENDIF.
ENDFORM. "rshfit_i
*& Form c2int
*&---------------------------------------------------------------------*
* 字符转整型
*----------------------------------------------------------------------*
* -->C1 text
* -->I text
*----------------------------------------------------------------------*
FORM c2int USING c1 TYPE c i TYPE i.
FIELD-SYMBOLS <c1> TYPE x.
FIELD-SYMBOLS: <i> TYPE x.
ASSIGN c1 TO <c1> CASTING.
ASSIGN i TO <i> CASTING.
<i> = <c1>.
ENDFORM.
*& Form lshfit_c
*&---------------------------------------------------------------------*
* 字符左移
*----------------------------------------------------------------------*
* -->C1 待位移的字符
* -->PLACES 移几位
* -->I 位移后的结果
*----------------------------------------------------------------------*
FORM lshfit_c USING c1 TYPE c places TYPE i i TYPE i.
PERFORM c2int USING c1 i.
PERFORM lshfit_i USING i places i.
ENDFORM. "lshfit
*&---------------------------------------------------------------------*
*& Form rshfit_c
*&---------------------------------------------------------------------*
* 字符右移
*----------------------------------------------------------------------*
* -->C1 待位移的字符
* -->PLACES 移几位
* -->I 位移后的结果
*----------------------------------------------------------------------*
FORM rshfit_c USING c1 TYPE c places TYPE i i TYPE i.
PERFORM c2int USING c1 i.
PERFORM rshfit_i USING i places i.
ENDFORM. "rshfit_c
ABAP语言实现 左移 <<、无符号右移 >>> 位移操作的更多相关文章
- Java负整数的左移、右移、无符号右移
转自 Java负整数的左移.右移.无符号右移 Java负整数的左移.右移.无符号右移.正数的位移没有涉及到符号,而且正数的原码.反码.补码都是一样的,所以相对简单,但是对于负整数的位移,往往容易混淆 ...
- 原码,反码,补码 与(&) 或(|) 非(~) 异或(^) 左移 << 右移 >> 无符号右移 >>>
原码 数字在计算机中以二进制表示,8位的字长,最高位是符号位, 正数为0,负数为1.比如,3为0000 0011: -3为1000 0011. 注意,Java中int为32位.3的16进制表示为3,- ...
- java的<<左移,>>右移,>>>无符号右移
>>右移 右移,道在二进制中,假设用一个32位的Int表示一个64,那么高位就都是0,所以当我们把整个二进制数右移,如0100000 >> 2 = 0001000,可以看到右移 ...
- java移位运算符:<<(左移)、>>(带符号右移)和>>>(无符号右移)。
1. 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数. 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规 ...
- 分析轮子(二)- << ,>>,>> (左移、右移、无符号右移)
前言:写 分析轮子(一)-ArrayList.java 的时候看到源码中有 int newCapacity = oldCapacity + (oldCapacity >> 1); 这样的代 ...
- [JAVA]移位运算(左移<<,右移>>和无符号右移>>>)
一.背景知识 整数在内存中是以二进制的形式存在的,而且存的是该整数的补码.最高位代表符号位,正数为0,负数为1 正数的补码是其二进制本身,负数的补码则是 符号位保持1不变,其他位按位取反再加1,+0和 ...
- java移位运算符实验程序:<<(左移)、>>(带符 号右移)和>>>(无符号右移)
public class txs { static void leftbit(){ int i; //整型长度为32位 ...
- Java,C 位移运算符 有符号右移>>与无符号右移>>>
个人博客 地址:https://www.wenhaofan.com/a/20181029232749 有符号右移 正数有符号右移 首先计算4>>2 将4转为二进制 0000 0100 右移 ...
- PHP实现无符号右移(js中的 >>>)
移位包括有符号左移(<<).有符号右移(>>).无符号右移(>>>),其中 js 支持三种移位,PHP只支持前两种移位(没查到第三种),恰好需要PHP进行无符 ...
随机推荐
- Zabbix监控Tomcat案例
今天在这里,我们来聊一聊JMX监控方式, JMX(java管理扩展程序)是java平台上为应用程序,设备,系统等植入管理功能的框架,JMX可以跨越一系列不同的系统平台,更加灵活的服务管理应用: 在za ...
- vue-cli 部分浏览器不支持es6的语法-babel-polyfill的引用和使用
npm install --save-dev babel-polyfill babel-polyfill用正确的姿势安装之后,引用方式有三种: 1.require("babel-polyfi ...
- h5调用qq客户端
这是第一种: <a href="tencent://message/?uin=1014167202&Site=在线QQ&Menu=yes"> <i ...
- Vue 组件(上)转载
一.定义 组件:应用界面上一个个的区块. 自定义的HTML元素. 二.创建和注册 Vue.extend() 扩展,创建组件构造器 Vue.component()注册组件,2个参数,1为标签,2是组件构 ...
- jquery|js|jq常用正则
var mobReg=/^1[34578]\d{9}$/; //手机号 if (!mobReg.test(mob)) { mui.alert("请填写正确手机号!"," ...
- netty01(长短连接、java)
使用netty需要添加依赖包 netty版本:netty-5.0.0.Alpha2 http://files.cnblogs.com/files/applerosa/netty-5.0.0.Alpha ...
- 025 SSM简单搭建
参考了同事的文档,自己也写一篇文档. 同时,补充了一下,程序是如何运行的. 一:SSM框架 1.说明 SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC ...
- 用easy-ui中的表单操作实现一行操作和多行操作
http://blog.sina.com.cn/s/blog_8e50ede90101fff9.html
- Effective前端2---加快页面打开速度
1.避免head标签JS阻塞 所有放在head标签里的JS和CSS都会阻塞页面渲染.如果这些CSS和JS需要记在时间比较久,中间页面会存在一个空白期,严重影响到用户体验. 例如以下代码:在head标签 ...
- linux 学习笔记 执行脚本篇章
r w x 读 写 执行 4 2 1 如果要启动tomcat服务器 即执行startup.sh 脚本文件 1) #chmod 444 startup.sh <----增加文本读权限 即 ...