下記のコードで上下左右のループをパスする部分のコードのイメージができません
とくに左右の部分での、cellIndex % SIDE_CELLS == SIDE_CELLS-1 の剰余の使い方など
がイメージできないです、SIDE_CELL-1というのはいったいどういうことですか、教えてくださいm(__)m

function update(cellInfos, tempCellInfos){
  //sliceで先頭からおしりまで切り出してコピーすると結果的に全部コピーになる
  tempCellInfos = cellInfos.slice();
  for (var index = 0; index < tempCellInfos.length; index++){
    //今から各細胞の自分のまわりの生死をチェックするので、カウンターを用意
    var liveCellCount = 0;
    //このコードでは前の行、隣の行、前の列、隣の列を二つのループで表現します
    for(var rowPointer = -1; rowPointer < 2; rowPointer++){
      for(var colPointer = -1; colPointer < 2; colPointer++){
        //もし自分ならばカウントしないので飛ばします。
        if(rowPointer == 0 && colPointer == 0){
          //コンティニューでこの回の繰り返しをパスすることができます
          continue;
        }
        //チェックするセルの番号を算出します
        var cellIndex = index + rowPointer * SIDE_CELLS + colPointer;
        if(cellIndex < 0 ||  cellIndex >= tempCellInfos.length){
          //上下の領域からはみ出していたらループをパス
          continue;
        }
        if(index < cellIndex && cellIndex % SIDE_CELLS == 0 || index > cellIndex && cellIndex % SIDE_CELLS == SIDE_CELLS-1){
          //左右が自分の隣の列でなくればループをパス
          continue;
}