ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
1037782 Топик полностью
SciFi (19.09.2020 09:11 - 09:17, просмотров: 524) ответил teap0t на #10. Опять детский. Ткните носом где в стандарте написано как будет выглядеть присвоение, например, 16-разрядному числу 8-разрядного значения. Что происходит с мусором в старших разрядах. Про сдвиги нашёл, а это никак.
Вот: 

6.5.16.1 Simple assignment

1 ...

2 In simple assignment (=), the value of the right operand is converted to the type of the

assignment expression and replaces the value stored in the object designated by the left

operand.

6.3.1.3 Signed and unsigned integers

1 When a value with integer type is converted to another integer type other than _Bool, if

the value can be represented by the new type, it is unchanged.


При преобразовании типа значение не меняется, если это возможно.

То есть было 0x01, стало 0x0001, то есть значение единица и до, и после. А если стало 0x0101, то это значение 257, оно другое, и по правилу 6.3.1.3(1) так нельзя.

Одно следствие из этого правила, которое пойдёт вразрез с привычками любителя кодить на ассемблере: при преобразовании из int8_t в int16_t 0xFF превращается в 0xFFFF (то есть -1). При преобразовании из uint8_t в uint16_t 0xFF превращается в 0x00FF, потому что 255.

ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้