Log in

No account? Create an account
По делам сюда приплыл, а не за этим [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

[Links:| English-language weblog ]

знаковый или беззнаковый? [фев. 22, 2018|12:50 pm]
Anatoly Vorobey

(эта запись может быть интересна программистам, знающим C/C++)

Во внутреннем форуме на работе кто-то устроил опрос, который просто не могу не украсть:

Опрос #2078582 unsigned short

"foo" is an "unsigned short". Is the expression "foo + foo" signed or unsigned?

implementation defined

Не смотрите в комментарии перед голосованием, там можно обсуждать правильный ответ.

[User Picture]From: leonov
2018-02-22 12:20 pm
Лишь в случае операндов разного типа. Иначе не имело бы смысл различие в реализации переполнения для знаковых и беззнаковых типов:

Unsigned integer arithmetic is always performed modulo 2^n where n is the number of bits in that particular integer. E.g. for unsigned int, adding one to UINT_MAX gives ​0​, and subtracting one from ​0​ gives UINT_MAX.
When signed integer arithmetic operation overflows (the result does not fit in the result type), the behavior is undefined: it may wrap around according to the rules of the representation (typically 2's complement), it may trap on some platforms or due to compiler options (e.g. -ftrapv in GCC and Clang), or may be completely optimized out by the compiler.


Edited at 2018-02-22 12:27 (UTC)
(Ответить) (Parent) (Thread)
From: (Anonymous)
2018-02-22 01:57 pm
Вы не туда смотрите.
Начните отсюда https://ideone.com/sT7pg0 а потом ищите объяснение этому.
(Ответить) (Parent) (Thread)