$ 83 - $ 74 = $ 83 + (- $ 74) = $ 83 + (~ $ 74) + 1
Вот как логика c видит это.
1
10000011
+ 10001011
==============
fini sh
100000111
10000011
+ 10001011
==============
00001111
Два эквивалентных способа определения флага v, если перенос и вынос msbit не совпадают, тогда устанавливается флаг v, иначе не устанавливается. Другой способ, если msbit операндов (не забудьте инвертировать и добавить один, так как это сложение в логах c, а не вычитание) одинаковы, а результирующий msbit отличается от двух совпадающих операндов, тогда это переполнение, в противном случае, если все три одинаковы, или два мсбита операнда отличаются, тогда v = 0.
Это - то, как, чтобы понять почему, смотрите ответ prl, ответ не вписывается в число доступных битов.
Флаг C указывает c архитектуре, чтобы вычитать вы инвертируете второй операнд и инвертируете перенос (сделайте его 1) на входе, на выходе некоторые архитектуры инвертируют выполнение сделав это немного, другие оставят все как есть. Часто не документируется, поэтому вы должны экспериментировать, чтобы выяснить, что делает архитектура.