什么是偏移量 怎么计算
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是偏移量 怎么计算相关的知识,希望对你有一定的参考价值。
计算机汇编语言中的偏移量定义为:把存储单元的实际地址与其所在段的段地址之间的距离称为段内偏移,也称为“有效地址或偏移量”。
“偏移量是人工加密方式的一种解析手段,没有更改过默认偏移量的清机加钞员将无法在ATM上获取开锁密码;每个清机加钞员获得的密码为4组,每组2位数字。
因此偏移量必须对应为4组,可以设置为除全零以外的任意数值,不得将4组偏移量设置为同一数字。偏移量的计算分为“加法”和“减法”两种方式”。
扩展资料
偏移量属性:
offsetHeight:元素在垂直方向上占用的空间大小;相当于border-top+padding
top+height+padding-bottom+border-bottom
offsetWidth:元素在水平方向上占有的空间大小;相当于botder-left+padding-left+width+padding-right+border+right
offsetLeft:元素的左外边框至包含元素的左内边框之间的像素距离。
offsetTop:元素的上外边框至包含元素的上内边框之间的像素距离。
其中,offsetLeft和offsetTop属性与包含元素有关,包含元素的引用保存在offsetParent属性中。
参考资料来源;百度百科-偏移量
参考技术A 一、什麽是数组偏移量:数组在内存是一组连续的地址,比如,你声明了个数组,int a[5],这里有5个数组元素,第一个元素的下标为0,依此类推:1,2,3,4。偏移量就是指相对于数组第一个元素的偏移值。比如,偏移量为2,那么此时应该指向是 a[1]。二、偏移量的计算:
二维数组元素有两个下标:第一个下标表示该元素在第几行,第二个下标表示在第几列。二维数组的定义格式如下:
var
a:array[1..10,1..5] of integer;
其中:a是数组名,由程序员自定;array和of是定义数组的保留字;(这两点和一维数组定义的格式一样)中括号中的两个范围表示二维数组共有多少行、多少列(第一个范围表示行数,第二个范围表示列数);最后一个表示数组元素的类型,规定和一维数组一样。如上例,定义了一个二维数组a,共有10行5列。
例如:a[2,3]偏移量2乘以你主序的个数加3;a[0…4,1…5]的 a[2,1] ---> 2 * 5 + 0 = 10
第3行的第1个元素:
1 2 3 4 5
0 x x x x x
1 x x x x x
2 x x x x x <------就是它了
3 x x x x x
4 x x x x x
就是第几行 然后行数*每行的元素+第一个元素。 参考技术B 曾经的电脑主流是八位的,内存寻址只有16位,也就是64K。
当年PC机刚出的时候,还不完全是16位电脑,是个20位电脑
但是他的地址线由两部分组成,一部分叫做段地址
一部分叫做偏移量
,就类似单元楼住址,可以叫做单元的,然后这个某编号住户。
由这两个的叠加,形成一个地址。
算法是,段地址占高20-4位,偏移量占16-0位,然后加起来,
计算分页的项目偏移量
【中文标题】计算分页的项目偏移量【英文标题】:Calculating item offset for pagination 【发布时间】:2011-04-01 01:31:27 【问题描述】:这似乎是非常简单的数学,但不知何故,我的大脑无法思考......
我正在尝试实现分页,并且需要计算项目偏移量以用于限制我的结果集。我在计算页面的第一项应具有的索引时遇到问题。
例如。
with 1 page having 10 items
page 1 will have items 1 - 10
page 2 ............... 11 - 20
page 3 ............... 21 - 30
我想到了
offset = page * itemsPerPage + 1
但第 1 页的情况并非如此。必须有一个公式吗?我正在使用 PHP/Zend_Paginator/Doctrine2 但这应该是独立于语言的
想知道这是否应该在数学堆栈交换站点中
【问题讨论】:
【参考方案1】:使用offset = (page - 1) * itemsPerPage + 1
。
【讨论】:
不应该是:offset = (page - 1) * itemsPerPage 否则将永远不会显示结果编号 1? 您好,您的意思是偏移量 = (page_number - 1) * itemsPerPage;如果是这样,结果会不会生成大于 itemsPerPage 数字的数字? 我是想以Jiew的例子来回答这个问题。他显然是在计算每一页的第一个项目编号;所以 firstItemForPage(1)=(1-1)·10+1=1,firstItemForPage(2)=(2-1)·10+1=11,以此类推。$offset = ($pageLimit * $page) - $pageLimit;
我已经用了一年多了。你也可以试试看。【参考方案2】:
老实说取决于。我不是 PHP 人,但我会把两者都放在那里。如果您要将记录拉入某种形式的集合(列表、数组等),那么您的公式应该是:
offset = (page - 1) * itemsPerPage
这是因为大多数(同样,我不是 PHP 人)数组和列表使用 0 作为它们的第一个元素。如果他们的第一个元素不使用 0 和/或您从表格或 ID 从 1 开始的其他东西中提取,那么它应该是:
offset = (page - 1) * itemsPerPage + 1
我希望这很清楚并有所帮助。
【讨论】:
“通常”每个人都以 0 为起点,无论是 PHP、javascript 等【参考方案3】: start = (page - 1) * itemsPerPage + 1
end = totalItems
if (itemsPerPage < totalItems)
end = itemsPerPage * page
if (end > totalItems)
end = totalItems;
// e.g. "21-30 of 193 items"
start + '-' + end + ' of ' + totalItems + ' items'
【讨论】:
【参考方案4】:以 JS 为例,对于渐进式 web app 的人...
JS 数组有原型方法 .slice(start, end)
overview here 它需要一个开始索引和一个结束索引作为参数。
我发现计算两个索引的最简单方法如下;
起始索引
var start = parseInt((selectedPage - 1) * resultsPerPage);
结束索引
var end = parseInt(selectedPage * resultsPerPage);
执行
var myPaginatedArray.slice(start, end);
【讨论】:
【参考方案5】:我认为这个很完美,涵盖了所有场景。
$offset = ($pageLimit * $page) - $pageLimit;
【讨论】:
可以省略乘法大括号【参考方案6】:我想我会添加以下内容来显示文本,例如:
查看 21-30 个项目,共 32 个项目。
在这个例子中:
itemsPerPage = 10
page = 3
totalItems = 32
总共会有 4 个页面,其中最后一页只有 2 个要显示的项目。以下对我有用:
(page - 1) * itemsPerPage + 1 + "-" +
Math.Min((page - 1) * itemsPerPage + itemsPerPage , totalItems ) + " of " +
totalItems + " items."
抱歉,严格来说是在 C# 中,但这个想法应该很清楚。 Math.Min(x, y)
返回两个参数中较小的数字。不使用Math.Min
可能有一个更简单的解决方案来计算上限。
【讨论】:
【参考方案7】:一个涵盖所有场景的简单分页方程将是:
$page = $_GET['page'];
$items_per_page = 20; //for example
$offset = 0; //initial offset
if ($page != 1)
$offset = ($page * $items_per_page) - $items_per_page;
给定 每页的项目数 = 5
输出
当page = 1,offset = 0
当page = 2,offset = 5
当page = 3, offset = 10
当 page = 4,offset = 15 . . .
【讨论】:
【参考方案8】:使用这个
$row_page = 5; //items per page
if(isset($_GET['p']))
$page_num = $_GET['p'];
else
$page_num = 0;
$offset = ( $page_num ) * $row_page;
$cn = 31;
$pg = (int)ceil($cn / $row_page);
for ($i = 1; $i <= $pg; $i++)
echo "<br/><a href='?p=$i'>".$i;
【讨论】:
【参考方案9】:我以前在 Angular 4 中遇到过这个问题,这是一个模板的编辑,带有一个更简单的分页列表:
<div *ngFor="let item of pagedItems; let i = index">
<div class="item-caption">
Item (currentPage - 1) * itemsPerPage + (i + 1) of totalItemsDownloaded
</div>
<div class="item-name">item.name</div>
</div>
我总是方便 currentPage
作为点击 Prev 和 Next 按钮的结果,但初始化为 1,itemsPerPage
作为应用设置,totalItemsDownloaded
是 WebAPI 调用报告的总项目数。
希望对你有帮助
【讨论】:
【参考方案10】:使用以下公式,效果很好:
对于start_index
:(page_number - 1) * per_page
对于end_index
:start_index + (per_page - 1)
(通常我们在 SQL 中仅指定 per_page - 1
)
page_number | start_index | end_index | per_page | formula for start_index
1 | 0 | 24 | 25 | (page_number - 1) * per_page
2 | 25 | 49 | 25 | (page_number - 1) * per_page
3 | 50 | 99 | 25 | (page_number - 1) * per_page
【讨论】:
【参考方案11】:在触发每个页面事件时,以下是计算偏移量的标准且最简单的方法。
offset = ((pageNumber-1) * itemPerPage + 1)-1;
pageNumber = 1
itemPerPage = 10
offset = ((pageNumber-1) * itemPerPage + 1)-1;
console.log("offset for 1st page", offset)
pageNumber = 2
offset = ((pageNumber-1) * itemPerPage + 1)-1;
console.log("offset for 2nd page", offset)
pageNumber = 3
offset = ((pageNumber-1) * itemPerPage + 1)-1;
console.log("offset for 3rd page", offset)
【讨论】:
是的,这就是公认的答案所说的以上是关于什么是偏移量 怎么计算的主要内容,如果未能解决你的问题,请参考以下文章