Преобразование строкового поля в Integer:
db.db-name.find({field-name: {$exists: true}}).forEach(function(obj) {
obj.field-name = new NumberInt(obj.field-name);
db.db-name.save(obj);
});
Преобразование целочисленного поля в строку:
db.db-name.find({field-name: {$exists: true}}).forEach(function(obj) {
obj.field-name = "" + obj.field-name;
db.db-name.save(obj);
});
Это работает (отображает 15) с компилятором Microsoft C (без stdint.h, поэтому я использовал typedef):
#include <stdio.h>
typedef unsigned char uint8_t;
int main(void) {
uint8_t i = 0;
i = (uint8_t)(i - 1) % 16;
printf("i: %d\n", i);
return 0;
}
Причина 255 в том, что (i - 1) повышен до integer и целочисленное деление, используемое для% в C, округляет до нуля вместо отрицательной бесконечности (округление до отрицательной бесконечности - это то же самое, что и в математике, естествознании и других языках программирования). Так что для C% равен нулю или имеет тот же знак, что и дивиденд (в данном случае -1% 16 == -1), в то время как в математике по модулю ноль или тот же знак, что и у делителя.