Я сделал подписанное переполнение много раз, но каждый раз turbo c wraparound. Например:Почему turbo c wraparound подписывает целочисленное переполнение каждый раз, несмотря на то, что подписанное целочисленное переполнение не определено?
#include <stdio.h>
void main() {
int i = 100000;
printf("%d", i);
getch();
}
Выход -31072
который является ожидаемым выходом, если Манжета сделана. В двоичном формате 100000(dec)
: 11000011010100000
и последние 16 бит хранятся в : 1000011010100000
. В двух дополнительных представлениях 1000011010100000
- -31072
.
Посмотрите на [это] (https://www.youtube.com/watch?v=yG1OZ69H_-o). Это хорошая работа по объяснению неопределенного поведения больше и конкретно говорит о неопределенном поведении и о том, как мы иногда используем гиперболу для ее описания. – wally