Quiero almacenar -1
en la memoria más pequeña, como en {8||16||32} bits en lugar de 256 bits.
int i = -1;
Cuando vuelvo var
, vuelve -1L
en lugar de -1
.
He asignado -1
en una int8
variable. Como sé int8
es entero con signo.
int8 i = -1;
Pero cuando regreso output
, devuelve: '115792089237316195423570985008687907853269984665640564039457584007913129639679L' en lugar de -1
.
[P] ¿Qué debo hacer para obtener -1
?
Tenga en cuenta que he experimentado este problema en populus
:
Como contrato he usado el contrato de @RichardHorrocks: NumTest
en la respuesta.
prueba.py:
def test_receipt(web3, accounts, chain, unmigrated_chain):
my_contract = unmigrated_chain.get_contract('NumTest');
set_txn_hash = my_contract.transact().NumTest();
contract_address = unmigrated_chain.wait.for_receipt(set_txn_hash)
output = my_contract.call().number();
print(output);
Gracias por su valioso tiempo y ayuda.
Este código -1
me devuelve (para ambos int8
y int
):
pragma solidity ^0.4.6;
contract NumTest {
int8 i;
function NumTest() {
i = -1;
}
function number() constant returns (int8 num) {
return i;
}
}
Como se mencionó en hilos anteriores, debido a los costos de desempacar , el int8
estuche (278 gasolina) es en realidad más caro que el estuche predeterminado int
( int256
224 gasolina).
Para el código anterior, y para completar (y porque estaba interesado):
integer bits | gas cost
-------------+---------
8 | 278
16 | 278
32 | 278
64 | 278
128 | 278
248 | 278
256 | 224
Por lo tanto, los costos de desempacar son los mismos para cualquier cosa por debajo del tamaño óptimo.
populus
y, dado que no funcionaba populus
, asumí que no funcionará en un entorno de cadena de bloques real. Supongo que el problema puede estar relacionado con python
o populus
supongo. He actualizado mi pregunta con mi caso de prueba.@RichardHorrocks
alper