Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   false в -1 true в 1 (https://javascript.ru/forum/misc/48250-false-v-1-true-v-1-a.html)

рони 26.06.2014 17:50

false в -1 true в 1
 
Как ещё можно получить из false -1 а из true 1?
<script>
    var x = false,
        y = true;
    document.write([(x << 1) - 1, (y << 1) - 1]);
    document.write('<br>');
    document.write([x ? 1 : -1, y ? 1 : -1]);
    document.write('<br>');
    document.write([x - !x, y - !y]) //вариант  nerv_
    document.write('<br>');
    document.write([(x - .5) * 2, (y - .5) * 2]) //BETEPAH
    document.write('<br>');
   document.write([ +x || -1 , +y || -1 ])  // MallSerg and  Aetae 
</script>

nerv_ 26.06.2014 18:18

alert(true - !true);
alert(false - !false);


---

Получил так:
x + y = 1
x - y = -1

рони 26.06.2014 18:20

nerv_,
спасибо за вариант! добавил в 1 пост может ещё кто подскажет.

Aetae 26.06.2014 19:29

~false, +true

рони 26.06.2014 20:29

Aetae,
1 переменная на входе (true|false) и 1 преобразование/функция на выходе либо 1 либо -1

BETEPAH 26.06.2014 21:19

(!!x - .5) / .5

2 * (!!x - .5)

рони 26.06.2014 21:58

BETEPAH,
ок! :yes: добавлено в 1 пост -- оба только варианта защитаны как 1

MallSerg 26.06.2014 22:37

<script>
x=false;
y=true;
document.write([x++||x-2,y++||y-2])
</script>

BETEPAH 26.06.2014 22:44

Цитата:

Сообщение от рони
оба только варианта защитаны как 1

я бы за половину посчитал бы... ;) Это лишь вариация твоего первого варианта :)

рони 26.06.2014 22:52

MallSerg,
ок! жаль только сама переменная потеряла своё значение - добавлено в 1 пост.

рони 26.06.2014 22:56

BETEPAH,
разделить на .5 всёравно что умножить 2 я в этом плане

BETEPAH 26.06.2014 23:05

рони,
так я же не спорю, говорю же без сарказма.
На полноценный вариант это с трудом катит, так как разделить на .5 и умножить на 2 это все равно, что сделать бинарный левый сдвиг на 1 :)
Ну и двойка вынесена за скобки.

рони 26.06.2014 23:10

Всем спасибо взял вариант nerv_, как более простой и короткий.

MallSerg 26.06.2014 23:11

Цитата:

Сообщение от рони (Сообщение 318133)
MallSerg,
ок! жаль только сама переменная потеряла своё значение - добавлено в 1 пост.

<script>
x=false;
y=true;
document.write([ x && 1 || -1 , y && 1 || -1 ])
</script>

рони 26.06.2014 23:15

MallSerg,
:victory: зачёт

Aetae 27.06.2014 01:18

MallSerg, тогда уж так:
<script>
x=false;
y=true;
document.write([ +x || -1 , +y || -1 ])
</script>

Хотя фигня всё это, на деле я бы пользовался вариантом номер два, ибо просто и наглядно.

рони 27.06.2014 01:42

Aetae,
:victory:

MallSerg 27.06.2014 13:49

Любопытные результаты в разных браузерах )
<script>
var ret=0 , t1, t2 , x=false;

t1 = new Date();
ret = 0;
for (i=0; i < 10000000 ; i++){ret += (x << 1) - 1 } ;
t2 = new Date();
document.write(t1-t2);	document.write("<br>");
document.write(ret);	document.write("<br>");

//------------------------
t1 = new Date(); 
ret = 0;
for (i=0; i < 10000000 ; i++){ret += x ? 1 : -1 } ;
t2 = new Date();
document.write(t1-t2);	document.write("<br>");
document.write(ret);	document.write("<br>");
//------------------------
t1 = new Date();
ret = 0;
for (i=0; i < 10000000 ; i++){ret += x - !x ;} ;
t2 = new Date();
document.write(t1-t2);	document.write("<br>");
document.write(ret);	document.write("<br>");
//------------------------
t1 = new Date();
ret = 0;
for (i=0; i < 10000000 ; i++){ret += (x - .5) * 2 ;} ;
t2 = new Date();
document.write(t1-t2);	document.write("<br>");
document.write(ret);	document.write("<br>");
//------------------------
t1 = new Date();
ret = 0;
for (i=0; i < 10000000 ; i++){ret += +x || -1 ;} ;
t2 = new Date();
document.write(t1-t2);	document.write("<br>");
document.write(ret);	document.write("<br>");
//------------------------




</script>


Часовой пояс GMT +3, время: 00:08.