Aduino 1.8.10 bug or corrupted?

void setup() {
  Serial.begin(9600);
  unsigned int diff = 0; //unsigned don't take the sign in accout.
  unsigned int milli = 0;
  unsigned int sum = 0;
  unsigned  int stored = 0;

  milli = 1020;
  if ((diff = milli - sum) >= 1000) {
    stored = diff;
    sum += milli ; //1020
    Serial.println("A");
    Serial.println(stored); //1200
    Serial.println(sum);
  }


  milli = 2050;
  if ((diff = milli - sum) >= 1000) {
    stored = diff;
    sum += milli;//3070
    Serial.println("B");
    Serial.println(stored); //1030
    Serial.println(sum);
  }

  milli = 4100;
  if ((diff = milli - sum) >= 1000) {
    stored = diff;
    sum += milli ; //7170
    Serial.println("C");
    Serial.println(stored);  //1030
    Serial.println(sum);
  }

  milli = 44  ; //flipped
  if ((diff = milli - sum) >= 1000) {//44 - 7170 = -7126
    stored = diff;
    sum += milli; //7214
    Serial.println("D");
    Serial.println(stored); //44 - (-7126) stored = 7214
    Serial.println(sum);
  }

  milli = 1144;
  if ((diff = milli - sum) >= 1000) {//
    stored = diff;
    sum += milli;  //8358.
    Serial.println("E");
    Serial.println(stored);  // 1144 - (7214).
    Serial.println(sum);
  }

  milli = 0;
  if ((diff = milli - sum) >= 1000) {// 6070
    stored = diff;
    sum += milli;
    Serial.println("F");
    Serial.println(stored);
    Serial.println(sum);
  }

  milli = 2000;
  if ((diff = milli - sum) >= 1000) {
    stored = diff;
    sum += milli;
    Serial.println("G");

    Serial.println(stored);
    Serial.println(sum);
  }
}

void loop() {
}

I don't know why I have these answers in D, E, F , G

So when it (the unsigned) meets a higher number it rolls up to is higher value.

58410+7170 - 44 =65536

(diff = milli - sum)

Would that work better if it was before the if:

diff = milli - sum;
if (diff >= 1000) { //44 - 7170 = -7126

I've not seen math done like that with in if.

CrossRoads:
I've not seen math done like that with in if.

It's perfectly legal. The "value" of an assignment statement is the value assigned. Been that way since K met R.

CrossRoads:
(diff = milli - sum)

Would that work better if it was before the if:

diff = milli - sum;
if (diff >= 1000) { //44 - 7170 = -7126

I've not seen math done like that with in if.

I was surprised it worked! Ha ha.

It started with this nice tutor: Secrets of Arduino millis: How it works and how to use it.

Regards

jpd

void setup() {
  Serial.begin(9600);
  char diff = 0, stored = 0; 
  unsigned  char milli = 0, mantiss = 0, indice = 0 ;
  unsigned  int sum = 0; //unsigned don't take the sign in accout


  milli = 80;
  diff = milli - sum; 
  if (diff >= 50) {
    stored = diff; 
    sum += diff;
    
    if (sum >= 255)  {
      mantiss = sum % 255;
      indice = sum / 255 ;
    } 
    Serial.println("A");
    Serial.print("   mantiss = "); Serial.println((int)mantiss);
    Serial.print("    indice = "); Serial.println((int)indice);
    Serial.print("diff >= 50 = "); Serial.println((int)stored); 
    Serial.println(sum);
  }


  milli = 140;
  diff = milli - sum;
  if (diff >= 50) {
    stored = diff; sum += diff;   //
    if (sum >= 255)  {
      mantiss = sum % 255;
      indice = sum / 255 ;
    }//3070
    Serial.println("B");
    Serial.print("   mantiss = "); Serial.println((int)mantiss);
    Serial.print("    indice = "); Serial.println((int)indice);
    Serial.print("diff >= 50 = "); Serial.println((int)stored); //1030
    Serial.println(sum);
  }

  milli = 200;
  diff = milli - sum; 
  if (diff >= 50) {
    stored = diff; sum += diff;  
    if (sum >= 255)  {
      mantiss = sum % 255;
      indice = sum / 255 ;
    } 
    Serial.println("C");
    Serial.print("   mantiss = "); Serial.println((int)mantiss);
    Serial.print("    indice = "); Serial.println((int)indice);
    Serial.print("diff >= 50 = "); Serial.println((int)stored);  //1030
    Serial.println(sum);
  }

  milli = 255  ; // >=255
  diff = milli - sum;
  if (diff >= 50) {
    stored = diff; sum += diff;
    if (sum >= 255)  {
      mantiss = sum % 255;
      indice = sum / 255;
    } 
    Serial.println("D");
    Serial.print("   mantiss = "); Serial.println((int)mantiss);
    Serial.print("    indice = "); Serial.println((int)indice);
    Serial.print("diff >= 50 = "); Serial.println((int)stored); //44 - (-7126) stored = 7214
    Serial.println(sum);
  }

  milli = 315; // >=255 + 0  + 60
  diff = milli - sum;
  if (diff >= 50) {
    stored = diff; sum += diff;
    if (sum >= 255)  {
      mantiss = sum % 255;
      indice = sum / 255 ;
    }  

    Serial.println("E");
    Serial.print("   mantiss = "); Serial.println((int)mantiss);
    Serial.print("    indice = "); Serial.println((int)indice);
    Serial.print("diff >= 50 = "); Serial.println((int)stored);  //
    Serial.println(sum);
  }

  milli = 390; 
  diff = milli - sum;  
  if (diff >= 50) {
    stored = diff; sum += diff;
    if (sum >= 255)  {
      mantiss = sum % 255;
      indice = sum / 255 ;
    }  
    Serial.println("F");
    Serial.print("   mantiss = "); Serial.println((int)mantiss);
    Serial.print("    indice = "); Serial.println((int)indice);
    Serial.print("diff >= 50 = "); Serial.println((int)stored);
    Serial.println(sum);
  }

  milli = 450;
  diff = milli - sum;
  if (diff >= 50) {
    stored = diff; sum += diff;
    if (sum >= 255)  {
      mantiss = sum % 255;
      indice = sum / 255 ;
    } 
    Serial.println("G");
    Serial.print("   mantiss = "); Serial.println((int)mantiss);
    Serial.print("    indice = "); Serial.println((int)indice);
    Serial.print("diff >= 50 = "); Serial.println((int)stored);
    Serial.println(sum);
  }


  milli = 520;
  diff = milli - sum;
  if (diff >= 50) {
    stored = diff; sum += diff;
    sum += diff;
    if (sum >= 255)  {
      mantiss = sum % 255;
      indice = sum / 255 ;
    } 
    Serial.println("H");
    Serial.print("   mantiss = "); Serial.println((int)mantiss);
    Serial.print("    indice = "); Serial.println((int)indice);
    Serial.print("diff >= 50 = "); Serial.println((int)stored);
    Serial.println(sum);
  }
}

void loop() {
}

New sketch