mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Added Content and Edited for readability
The example for signextend requested by @bshastry was added. Codeblock was moved before warning for readability.
This commit is contained in:
parent
1978e1d3ff
commit
1d9b6b5bbf
@ -394,17 +394,6 @@ use ``x_slot``, and to retrieve the byte-offset you use ``x_offset``.
|
|||||||
|
|
||||||
Local Solidity variables are available for assignments, for example:
|
Local Solidity variables are available for assignments, for example:
|
||||||
|
|
||||||
.. warning::
|
|
||||||
If you access variables of a type that spans less than 256 bits
|
|
||||||
(for example ``uint64``, ``address``, ``bytes16`` or ``byte``),
|
|
||||||
you cannot make any assumptions about bits not part of the
|
|
||||||
encoding of the type. Especially, do not assume them to be zero.
|
|
||||||
To be safe, always clear the data properly before you use it
|
|
||||||
in a context where this is important:
|
|
||||||
``uint32 x = f(); assembly { x := and(x, 0xffffffff) /* now use x */ }``
|
|
||||||
To clean signed types, you can use the ``signextend`` opcode:
|
|
||||||
``assembly { signextend(0, x) }``
|
|
||||||
|
|
||||||
.. code::
|
.. code::
|
||||||
|
|
||||||
pragma solidity >=0.4.11 <0.7.0;
|
pragma solidity >=0.4.11 <0.7.0;
|
||||||
@ -418,6 +407,17 @@ Local Solidity variables are available for assignments, for example:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
If you access variables of a type that spans less than 256 bits
|
||||||
|
(for example ``uint64``, ``address``, ``bytes16`` or ``byte``),
|
||||||
|
you cannot make any assumptions about bits not part of the
|
||||||
|
encoding of the type. Especially, do not assume them to be zero.
|
||||||
|
To be safe, always clear the data properly before you use it
|
||||||
|
in a context where this is important:
|
||||||
|
``uint32 x = f(); assembly { x := and(x, 0xffffffff) /* now use x */ }``
|
||||||
|
To clean signed types, you can use the ``signextend`` opcode:
|
||||||
|
``assembly { signextend(<bit_width_of_x>, x) }``
|
||||||
|
|
||||||
Labels
|
Labels
|
||||||
------
|
------
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user