Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

problema banale calcolatrice

126 views
Skip to first unread message

rosario

unread,
Mar 25, 2013, 3:48:30 AM3/25/13
to
scusate, ho un problema con una calcolatrice
ho una vecchia sharp el-506r come questa
http://static.bakeca.it/immagini/1da/1da4a77dc1bbedfe3301efd83c440998.jpg

praticamente ci sono i pulsanti and or xor ecc ma pare che funzionano
solo in modalita' esadecimale/binario ecc ma non in decimale

per caso qualcuno sa come fare per fare per es. 90 xor 20 in decimale
senza fare prima le conversioni?

scusate per la banalita'
grazie

lefthand

unread,
Mar 25, 2013, 12:43:20 PM3/25/13
to
Il Mon, 25 Mar 2013 08:48:30 +0100, rosario ha scritto:


> praticamente ci sono i pulsanti and or xor ecc ma pare che funzionano
> solo in modalita' esadecimale/binario ecc ma non in decimale
>
> per caso qualcuno sa come fare per fare per es. 90 xor 20 in decimale
> senza fare prima le conversioni?

Ma che senso avrebbe? Gli operatori logici si usano per confrontare bit a
bit, per creare maschere ecc.
Ad esempio
11001011 AND
10100110 ->
10000010

In esadecimale la stessa espressione è CB AND A6 -> 82

Oppure
11001011 XOR
10100110 ->
01101101

In esadecimale CB XOR A6 -> 6D

L'esadecimale è solo un modo compatto di scrivere il binario, ma con i
numeri in base dieci come lo vorresti fare?

--
"Oggi la scienza ha scoperto come asportare il cuore di un uomo [...].
E la propaganda è riuscita in più occasioni ad asportare la mente di
intere nazioni." (Brian Fawcett, Cambogia)

Kiuhnm

unread,
Mar 25, 2013, 1:05:45 PM3/25/13
to
On 3/25/2013 17:43, lefthand wrote:
> Il Mon, 25 Mar 2013 08:48:30 +0100, rosario ha scritto:
>
>
>> praticamente ci sono i pulsanti and or xor ecc ma pare che funzionano
>> solo in modalita' esadecimale/binario ecc ma non in decimale
>>
>> per caso qualcuno sa come fare per fare per es. 90 xor 20 in decimale
>> senza fare prima le conversioni?
>
> Ma che senso avrebbe? Gli operatori logici si usano per confrontare bit a
> bit, per creare maschere ecc.
> Ad esempio
> 11001011 AND
> 10100110 ->
> 10000010
>
> In esadecimale la stessa espressione � CB AND A6 -> 82
>
> Oppure
> 11001011 XOR
> 10100110 ->
> 01101101
>
> In esadecimale CB XOR A6 -> 6D
>
> L'esadecimale � solo un modo compatto di scrivere il binario, ma con i
> numeri in base dieci come lo vorresti fare?

Come lo fa qualsiasi linguaggio di programmazione sulla faccia della
terra. La rappresentazione (decimale, binaria, ecc...) � irrilevante.

Kiuhnm

rosario

unread,
Mar 25, 2013, 3:09:29 PM3/25/13
to
Il 25/03/2013 17.43, lefthand ha scritto:
> Il Mon, 25 Mar 2013 08:48:30 +0100, rosario ha scritto:
>
>
>> praticamente ci sono i pulsanti and or xor ecc ma pare che funzionano
>> solo in modalita' esadecimale/binario ecc ma non in decimale
>>
>> per caso qualcuno sa come fare per fare per es. 90 xor 20 in decimale
>> senza fare prima le conversioni?
>
> Ma che senso avrebbe? Gli operatori logici si usano per confrontare bit a
> bit, per creare maschere ecc.
> Ad esempio
> 11001011 AND
> 10100110 ->
> 10000010
>
> In esadecimale la stessa espressione è CB AND A6 -> 82
>
> Oppure
> 11001011 XOR
> 10100110 ->
> 01101101
>
> In esadecimale CB XOR A6 -> 6D
>
> L'esadecimale è solo un modo compatto di scrivere il binario, ma con i
> numeri in base dieci come lo vorresti fare?
>

mi scoccia ogni volta andare a cercare l'altra calcolatrice che lo fa
fare senza problemi, oppure accendere il computer apposta..
mi chiedevo se ero io a non saper usare bene questa calcolatrice o se e'
una funzione mancante..

lefthand

unread,
Mar 25, 2013, 3:33:28 PM3/25/13
to
Il Mon, 25 Mar 2013 18:05:45 +0100, Kiuhnm ha scritto:


> Come lo fa qualsiasi linguaggio di programmazione sulla faccia della
> terra. La rappresentazione (decimale, binaria, ecc...) è irrilevante.

Irrilevante? Fammi un esempio: come procedi per 12 AND 28 = ?

Kiuhnm

unread,
Mar 25, 2013, 3:51:31 PM3/25/13
to
On 3/25/2013 20:33, lefthand wrote:
> Il Mon, 25 Mar 2013 18:05:45 +0100, Kiuhnm ha scritto:
>
>
>> Come lo fa qualsiasi linguaggio di programmazione sulla faccia della
>> terra. La rappresentazione (decimale, binaria, ecc...) � irrilevante.
>
> Irrilevante? Fammi un esempio: come procedi per 12 AND 28 = ?

Apro la shell di Python e digito "12 & 28".
Oppure apro la calcolatrice di Windows, vado su modalit� "Programmer" e
digito "12 AND 28".

Kiuhnm

Kiuhnm

unread,
Mar 25, 2013, 4:01:15 PM3/25/13
to
Nella mia calcolatrice bisogna prima andare in modalit� "Base-N" e
quindi si possono premere i pulsanti HEX, BIN, DEC, OCT per scegliere la
base. Premuto DEC (se non si � gi� in base 10) si pu� scrivere 90 xor 20
direttamente.

Kiuhnm

lefthand

unread,
Mar 26, 2013, 9:45:21 AM3/26/13
to
Il Mon, 25 Mar 2013 20:51:31 +0100, Kiuhnm ha scritto:

>> Irrilevante? Fammi un esempio: come procedi per 12 AND 28 = ?
>
> Apro la shell di Python e digito "12 & 28". Oppure apro la calcolatrice
> di Windows, vado su modalità "Programmer" e digito "12 AND 28".

Molto illuminante. Che risultato ottieni? Perché quel risultato? A cosa
serve?

Kiuhnm

unread,
Mar 26, 2013, 10:44:04 AM3/26/13
to
On 3/26/2013 14:45, lefthand wrote:
> Il Mon, 25 Mar 2013 20:51:31 +0100, Kiuhnm ha scritto:
>
>>> Irrilevante? Fammi un esempio: come procedi per 12 AND 28 = ?
>>
>> Apro la shell di Python e digito "12 & 28". Oppure apro la calcolatrice
>> di Windows, vado su modalit� "Programmer" e digito "12 AND 28".
>
> Molto illuminante. Che risultato ottieni? Perch� quel risultato? A cosa
> serve?

Continua pure l'arrampicata da solo.

Kiuhnm

Luca85

unread,
Mar 26, 2013, 11:20:50 AM3/26/13
to
On 25 Mar, 08:48, rosario <x...@xx.com> wrote:

> per caso qualcuno sa come fare per fare per es. 90 xor 20 in decimale
> senza fare prima le conversioni?
>
> scusate per la banalita'
> grazie

Il problema, checchè ne dica Kiuhnm, è che in una qualsiasi base
diversa dal binario le operazioni logiche non sono definite.

O meglio....Viviamo in un mondo libero, se ti va puoi definire A xor
B (con A e B numeri appartenenti ad un isieme qualsiasi con la
cardinalità di N) come la conversione nella base di partenza del
risultato dello xor tra A convertito in binario e B convertito in
binario.
Ma capisci bene che non ha alcun senso matematico un'operazione così
definita!!!

Kiuhnm

unread,
Mar 26, 2013, 11:56:35 AM3/26/13
to
On 3/26/2013 16:20, Luca85 wrote:
> On 25 Mar, 08:48, rosario <x...@xx.com> wrote:
>
>> per caso qualcuno sa come fare per fare per es. 90 xor 20 in decimale
>> senza fare prima le conversioni?
>>
>> scusate per la banalita'
>> grazie
>
> Il problema, checch� ne dica Kiuhnm, � che in una qualsiasi base
> diversa dal binario le operazioni logiche non sono definite.

Mai sentito parlare di bitwise operator? Informati.
Il bitwise xor � un operatore che prende due interi e restituisce un
terzo intero, proprio come l'operatore somma.

> O meglio....Viviamo in un mondo libero, se ti va puoi definire [...]

Va a tutti tranne a te e a lefthand. Sinceramente mi basta.

Kiuhnm

Luca85

unread,
Mar 26, 2013, 12:02:40 PM3/26/13
to
On 26 Mar, 16:56, Kiuhnm <kiuhnm03.4t.yahoo.it> wrote:
> Mai sentito parlare di bitwise operator? Informati.
> Il bitwise xor un operatore che prende due interi e restituisce un
> terzo intero, proprio come l'operatore somma.

Sì, ma ha senso solo in binario!
L'ho usato un sacco di volte nel programmare in assembler.
Ma il senso dello xor tra 97 e 15 in decimale quale sarebbe?
Di più... sapresti definire l'operazione senza ricorrere al binario?
Io le operazioni logiche le faccio tra elementi logici.

Kiuhnm

unread,
Mar 26, 2013, 12:49:55 PM3/26/13
to
On 3/26/2013 17:02, Luca85 wrote:
> On 26 Mar, 16:56, Kiuhnm <kiuhnm03.4t.yahoo.it> wrote:
>> Mai sentito parlare di bitwise operator? Informati.
>> Il bitwise xor un operatore che prende due interi e restituisce un
>> terzo intero, proprio come l'operatore somma.
>
> S�, ma ha senso solo in binario!

Eddaje.

> L'ho usato un sacco di volte nel programmare in assembler.

Si dice "in assembly". L'assembler � il software che converte il codice
assembly in codice macchina.

> Ma il senso dello xor tra 97 e 15 in decimale quale sarebbe?

Lo stesso che se i due numeri fossero /scritti/ (sottolineo /scritti/)
in base 2.

> Di pi�... sapresti definire l'operazione senza ricorrere al binario?

Ragioni sulle potenze di 2. E allora? Ci� � irrilevante.

> Io le operazioni logiche le faccio tra elementi logici.

Questa NON � un'operazione logica. E' un'operazione BITWISE.
L'operazione logica � tra valori di verit�. L'operazione BITWISE � tra
interi (e non tra rappresentazioni, il che non avrebbe alcun senso).

Kiuhnm

Luca85

unread,
Mar 26, 2013, 12:54:16 PM3/26/13
to
On 26 Mar, 17:49, Kiuhnm <kiuhnm03.4t.yahoo.it> wrote:

> > Ma il senso dello xor tra 97 e 15 in decimale quale sarebbe?
>
> Lo stesso che se i due numeri fossero /scritti/ (sottolineo /scritti/)
> in base 2.

Non direi proprio!!!


> Questa NON un'operazione logica. E' un'operazione BITWISE.
> L'operazione logica tra valori di verit . L'operazione BITWISE tra
> interi (e non tra rappresentazioni, il che non avrebbe alcun senso).

Mi definiresti un'operazione bitwise senza usare dei concetti unici
della rappresentazione binaria?

Luca85

unread,
Mar 26, 2013, 1:02:07 PM3/26/13
to
On 26 Mar, 17:54, Luca85 <l.pr...@gmail.com> wrote:

> Mi definiresti un'operazione bitwise senza usare dei concetti unici
> della rappresentazione binaria?

Altrimenti mi sapresti fare un esempio di uso di una qualsiasi
funzione bitwise tra interi che non siano delle rappresentazioni
decimali di un qualcosa che è naturalmente binario?

Adam Atkinson

unread,
Mar 26, 2013, 3:03:41 PM3/26/13
to
On Mar 26, 5:02 pm, Luca85 <l.pr...@gmail.com> wrote:

> Altrimenti mi sapresti fare un esempio di uso di una qualsiasi
> funzione bitwise tra interi che non siano delle rappresentazioni
> decimali di un qualcosa che è naturalmente binario?

I valori Sprague-Grundy usati nei giochi combinatori?

Kiuhnm

unread,
Mar 26, 2013, 4:52:47 PM3/26/13
to
> decimali di un qualcosa che � naturalmente binario?

Lo xor bitwise pu� essere definito come segue.

<---
xor:NxN->N,
(a,b)->c
dove, per ogni i in N, c_i = 1 <=> (a_i = 1) xor (b_i = 1), con
(.)_i = (.)/(2^i) mod 2.

Es.
15 xor 1 = 14
15 xor 7 = 8
15 xor 15 = 0
<---

Il resto sono discorsi senza senso. L'espressione "interi che non siano
delle rappresentazioni decimali di un qualcosa che � naturalmente
binario" � completamente priva di senso. Gli interi /non/ sono
rappresentazioni decimali e non esistono cose "naturalmente binarie".

Kiuhnm

lefthand

unread,
Mar 27, 2013, 5:02:54 AM3/27/13
to
Il Tue, 26 Mar 2013 15:44:04 +0100, Kiuhnm ha scritto:


> Continua pure l'arrampicata da solo.

Ovvero "NON NE HO IDEA"

lefthand

unread,
Mar 27, 2013, 5:06:39 AM3/27/13
to
Il Tue, 26 Mar 2013 21:52:47 +0100, Kiuhnm ha scritto:

> Lo xor bitwise può essere definito come segue.
>
> <---
> xor:NxN->N,
> (a,b)->c
> dove, per ogni i in N, c_i = 1 <=> (a_i = 1) xor (b_i = 1), con
> (.)_i = (.)/(2^i) mod 2.
>
> Es.
> 15 xor 1 = 14
> 15 xor 7 = 8
> 15 xor 15 = 0
> <---

Quindi _sono_ operazioni sulla rappresentazione binaria, però scritte in
un modo incomprensibile e inutile.

> Il resto sono discorsi senza senso.

Appunto.

Luca85

unread,
Mar 27, 2013, 5:45:19 AM3/27/13
to
On 26 Mar, 20:03, Adam Atkinson <gh...@mistral.co.uk> wrote:

> I valori Sprague-Grundy usati nei giochi combinatori?

Non li conosco. :-(
Ho anche provato a fare una ricerchina su gogol ma mi si aprono delle
pagine che mi dan l'idea che mi mancano troppe basi per poter capire
di che si tratta in una decina di minuti...

(se vuoi riassumermi il concetto però mi interesserebbe)

Luca85

unread,
Mar 27, 2013, 5:57:10 AM3/27/13
to
On 26 Mar, 21:52, Kiuhnm <kiuhnm03.4t.yahoo.it> wrote:

> Lo xor bitwise pu essere definito come segue.

Ovvero facendo la conversione in binario dei numeri e poi lo xor tra i
bit della rappresentazione binaria.
Chiamalo "non specifico della rappresentazione".

>
> Il resto sono discorsi senza senso. L'espressione "interi che non siano
> delle rappresentazioni decimali di un qualcosa che naturalmente
> binario" completamente priva di senso. Gli interi /non/ sono
> rappresentazioni decimali e non esistono cose "naturalmente binarie".

E' una frase scritta nel mio italiano che ha costantemente preso 3 nei
temi, dalle elementari al liceo. Ma ha senso eccome.
Un numero naturale è un numero come definito dagli assiomi di Peano o
altro. E può essere rappresentato nella base preferita.
Quel che intendevo con "oggetto naturalmente binario" è una
"rappresentazione ordinata di variabili booleane". Un tale oggetto
perde il suo significato se convertito in un'altra rappresentazione,
per quanto possa essere matematicamente definibile farlo.

Kiuhnm

unread,
Mar 27, 2013, 8:32:44 AM3/27/13
to
On 3/27/2013 10:02, lefthand wrote:
> Il Tue, 26 Mar 2013 15:44:04 +0100, Kiuhnm ha scritto:
>
>
>> Continua pure l'arrampicata da solo.
>
> Ovvero "NON NE HO IDEA"

Ovvero "TI STAI ARRAMPICANDO SUGLI SPECCHI".
A domande non pertinenti tipo "Hai figli?" non vedo perch� dovrei
rispondere.
Non devo dimostrarti nulla. Io so come stanno le cose e te le ho
spiegate. Se non le vuoi accettare pace e amen.

Kiuhnm

Kiuhnm

unread,
Mar 27, 2013, 8:35:08 AM3/27/13
to
On 3/27/2013 10:57, Luca85 wrote:
> On 26 Mar, 21:52, Kiuhnm <kiuhnm03.4t.yahoo.it> wrote:
>
>> Lo xor bitwise pu essere definito come segue.
>
> Ovvero facendo la conversione in binario dei numeri e poi lo xor tra i
> bit della rappresentazione binaria.
> Chiamalo "non specifico della rappresentazione".
>
>>
>> Il resto sono discorsi senza senso. L'espressione "interi che non siano
>> delle rappresentazioni decimali di un qualcosa che naturalmente
>> binario" completamente priva di senso. Gli interi /non/ sono
>> rappresentazioni decimali e non esistono cose "naturalmente binarie".
>
> E' una frase scritta nel mio italiano che ha costantemente preso 3 nei
> temi, dalle elementari al liceo. Ma ha senso eccome.
> Un numero naturale � un numero come definito dagli assiomi di Peano o
> altro. E pu� essere rappresentato nella base preferita.
> Quel che intendevo con "oggetto naturalmente binario" � una
> "rappresentazione ordinata di variabili booleane". Un tale oggetto
> perde il suo significato se convertito in un'altra rappresentazione,
> per quanto possa essere matematicamente definibile farlo.

Lo xor � definito tra interi. Punto.
Mi fermo qui perch� evidentemente serve una laurea in informatica per
capire queste cose. Sigh.

Kiuhnm

Kiuhnm

unread,
Mar 27, 2013, 8:36:00 AM3/27/13
to
On 3/27/2013 10:06, lefthand wrote:
> Il Tue, 26 Mar 2013 21:52:47 +0100, Kiuhnm ha scritto:
>
>> Lo xor bitwise pu� essere definito come segue.
>>
>> <---
>> xor:NxN->N,
>> (a,b)->c
>> dove, per ogni i in N, c_i = 1 <=> (a_i = 1) xor (b_i = 1), con
>> (.)_i = (.)/(2^i) mod 2.
>>
>> Es.
>> 15 xor 1 = 14
>> 15 xor 7 = 8
>> 15 xor 15 = 0
>> <---
>
> Quindi _sono_ operazioni sulla rappresentazione binaria, per� scritte in
> un modo incomprensibile e inutile.

No sono operazioni sugli interi, ma � chiaro che sto parlando al muro.

Kiuhnm

lefthand

unread,
Mar 27, 2013, 11:03:21 AM3/27/13
to
Il Wed, 27 Mar 2013 13:36:00 +0100, Kiuhnm ha scritto:

> No sono operazioni sugli interi, ma è chiaro che sto parlando al muro.

A proposito di arrampicarsi sugli specchi! Quindi la rappresentazione
binaria non c'entra per nulla e i risultati delle operazioni si ottengono
per intercessione dello spirito santo.

lefthand

unread,
Mar 27, 2013, 11:05:59 AM3/27/13
to
Il Wed, 27 Mar 2013 13:35:08 +0100, Kiuhnm ha scritto:

> Lo xor è definito tra interi. Punto. Mi fermo qui perché evidentemente
> serve una laurea in informatica per capire queste cose. Sigh.

E' definito tra byte, o tra parole, o tra sequenze di bit di uguale
lunghezza. Che poi una sequenza di bit si possa convertire in un intero è
un'altra storia, ma evidentemente fa figo tirarsela.

Kiuhnm

unread,
Mar 27, 2013, 12:21:18 PM3/27/13
to
On 3/27/2013 16:03, lefthand wrote:
> Il Wed, 27 Mar 2013 13:36:00 +0100, Kiuhnm ha scritto:
>
>> No sono operazioni sugli interi, ma � chiaro che sto parlando al muro.
>
> A proposito di arrampicarsi sugli specchi! Quindi la rappresentazione
> binaria non c'entra per nulla e i risultati delle operazioni si ottengono
> per intercessione dello spirito santo.

Non cambiamo il discorso. Tu sostieni che lo xor tra numeri scritti in
rappresentazione decimale non abbia senso, mentre io ti sto dicendo che
lo xor � un operatore che prende interi e restituisce un intero.
Lo xor lavora su interi. L'idea degli operatori bitwise � proprio di
lavorare sugli interi a livello di bit, ma tali operatori prendono in
input degli interi e non la rappresentazione binaria degli interi (cio�
delle stringhe di 0 e 1). Se lo xor fosse definito su stringhe di 0 e 1,
allora avresti ragione, ma non � cos�: � definito su interi. Quindi �
perfettamente lecito scrivere "65 xor 12". Il modo in cui scrivi i due
interi � irrilevante visto che lo xor prende in input il *valore*, non
la *stringa* che scrivi.

Kiuhnm

Kiuhnm

unread,
Mar 27, 2013, 12:47:43 PM3/27/13
to
On 3/27/2013 16:05, lefthand wrote:
> Il Wed, 27 Mar 2013 13:35:08 +0100, Kiuhnm ha scritto:
>
>> Lo xor � definito tra interi. Punto. Mi fermo qui perch� evidentemente
>> serve una laurea in informatica per capire queste cose. Sigh.
>
> E' definito tra byte, o tra parole, o tra sequenze di bit di uguale
> lunghezza. Che poi una sequenza di bit si possa convertire in un intero �
> un'altra storia, ma evidentemente fa figo tirarsela.

La documentazione ufficiale Python dice:
"The ^ operator yields the bitwise XOR (exclusive OR) of its
arguments, which must be plain or long integers."
La documentazione Microsoft del C dice:
"The operands of bitwise operators must have integral types, but
their types can be different."
E potrei citarne mille altre...

Il punto era se una calcolatrice, un software di calcolo o un linguaggio
di programmazione debbano o no accettare la scrittura
12 xor 28
Certo che devono. Perch� non dovrebbero? 12 e 28 sono interi, giusto?
Quindi lo xor � definito.
Scrivere
12 xor 28
o
1100b xor 11100b
� la medesima cosa visto che 1100b = 12 e 11100b = 28.
In matematica,
x op y
� uguale a
s op t
se x=s e y=t.

Kiuhnm

Adam Atkinson

unread,
Mar 27, 2013, 2:41:15 PM3/27/13
to
On Mar 27, 9:45 am, Luca85 <l.pr...@gmail.com> wrote:

> > I valori Sprague-Grundy usati nei giochi combinatori?
>
> Non li conosco. :-(

> (se vuoi riassumermi il concetto però mi interesserebbe)

Consideriamo dei giochi coi mucchi di gettoni.

Una mossa consiste nel togliere dei gettoni da uno dei mucchi,
lasciando quello che resta di quel mucchio in 0,1 o 2 mucchi. (0
mucchi se togli tutti i gettoni dal mucchio, 1 se togli alcuni ma non
tutti i gettoni, e 2 mucchi se togli dei gettoni e spezzi quelli
rimasti in 2 mucchi.)

Se non puoi muovere (perche' non ci sono gettoni o non ci sono mosse
legali) quando tocca a te hai perso.

Un gioco specifico di questo tipo avra' magari delle restrizioni su
quanti gettoni puoi prendere da mucchi di quali dimensioni, lasciando
quanti mucchi dopo la mossa.

Prendiamo come esempio concreto il gioco in cui un mucchio di un solo
gettone deve essere lasciato cosi' com'e' ma da qualsiasi altro
mucchio puoi prendere un gettone e lasciare i gettoni rimasti come 1 o
2 mucchi.

Se stiamo giocando a questo gioco, tocca a te, e hai davanti mucchi di
3, 5, 6 e 17 pezzi, puoi vincere, e se lo puoi fare, che mossa fai?

Il gioco fondamentale di questo tipo e' quello in cui puoi togliere
qualsiasi numero da un mucchio, lasciando 0 o 1 mucchio.



rosario

unread,
Mar 27, 2013, 3:41:55 PM3/27/13
to
>
> Il punto era se una calcolatrice, un software di calcolo o un linguaggio
> di programmazione debbano o no accettare la scrittura
> 12 xor 28
> Certo che devono. Perch� non dovrebbero?


praticamente ho 8 calcolatrici scientifiche e a chi manca una cosa e a
chi manca un'altra (una non fa fare proprio le operazioni logiche,
un'altra fa fare tutto tranne con i decimali, un'altra fa fare tutto
tranne che con i binari, un'altra fa fare tutto ma e' lenta e troppo
impicciosa per usarla...e' una di quelle grafiche)

potreste consigliarmi una calcolatrice che faccia fare TUTTI questi
calcoli con operatori logici senza problemi?

grazie

Kiuhnm

unread,
Mar 27, 2013, 3:57:22 PM3/27/13
to
On 3/27/2013 20:41, rosario wrote:
> praticamente ho 8 calcolatrici scientifiche e a chi manca una cosa e a
> chi manca un'altra (una non fa fare proprio le operazioni logiche,
> un'altra fa fare tutto tranne con i decimali, un'altra fa fare tutto
> tranne che con i binari, un'altra fa fare tutto ma e' lenta e troppo
> impicciosa per usarla...e' una di quelle grafiche)
>
> potreste consigliarmi una calcolatrice che faccia fare TUTTI questi
> calcoli con operatori logici senza problemi?

La mia � una CASIO fx-4500P (programmabile, ma non grafica) e fa quello
che ti serve.

Kiuhnm

Elio Fabri

unread,
Mar 28, 2013, 4:09:52 PM3/28/13
to
Kiuhnm ha scritto:
> La documentazione ufficiale Python dice:
> ...
> E potrei citarne mille altre...
Nessun dubbio su questo. Ma lo trovo irrilevante.
Non ritengo che caclolatrici, software o linguaggi debbano essere presi
come autorità in materia di correttezza logica, anzi proprio l'opposto.
Ci si possono trovare vere e proprie oscenità, che hnno una
giustificazione pratica, ma da un punto di vista matematico oscenità
restano.
Per mio conto, anche senza fare ricerche nei miei vecchi levori di
programmazione sono certo che troverei anche impieghi dello XOR fra
tipi numerici. Ma questo non dimostra niente.

> Il punto era se una calcolatrice, un software di calcolo o un linguaggio
> di programmazione debbano o no accettare la scrittura
> 12 xor 28
> Certo che devono. Perché non dovrebbero? 12 e 28 sono interi, giusto?
> Quindi lo xor è definito.
> Scrivere
> 12 xor 28
> o
> 1100b xor 11100b
> è la medesima cosa visto che 1100b = 12 e 11100b = 28.
> In matematica,
> x op y
> è¨ uguale a
> s op t
> se x=s e y=t.
Ecco: già scrivere 1100b = 12 da un punto di vista logico è un
pasticcio...

Ma comunque, per tagliare la testa al toro: fammi un esempio di
applicazione dell'operatore XOR fra numeri, che non sia in realtà un
modo (comodo, sintetico quanto vuoi) di fare in realtà uno XOR fra
stringhe binarie.
Preciso meglio: riesci a trovare un solo caso in cui lo XOR fra numeri
abbia un impiego pratico, se non come espressione di un'operazione
bitwise fra le loro rappresentazioni binarie, dove quella che in realtà
serve è proprio l'operazione fra stringhe binarie? (es. operazioni su
maschere).


--
Elio Fabri

Adam Atkinson

unread,
Mar 28, 2013, 4:25:33 PM3/28/13
to
On Mar 28, 8:09 pm, Elio Fabri <elio.fa...@tiscali.it> wrote:

> Preciso meglio: riesci a trovare un solo caso in cui lo XOR fra numeri
> abbia un impiego pratico, se non come espressione di un'operazione
> bitwise fra le loro rappresentazioni binarie, dove quella che in realtà
> serve è proprio l'operazione fra stringhe binarie? (es. operazioni su
> maschere).

L'aritmetica Nim. Dal modo in cui e' definita la somma Nim non e'
affatto evidente che sia lo XOR.

E' vero che per calcolare la somma Nim piu' o meno chiunque pensa in
termini dello XOR ma non nasce come un'operazione fra stringhe
binarie.

Tu la conoscerai, ma magari qualcun altro no:

il "minimo escluso", mex, di un insieme di interi non-negativi e' il
numero non-negativo minore non presente nell'insieme. mex({})=0,
mex({0,1,3})=2, per esempio.

La somma Nim di due interi non-negativi a e b e':

a nim b = mex({tutti numeri della forma "a' nim b" e "a nim b'" dove
a'<a, b'<b}).

in realta' a nim b = a xor b ma questo non e' esattamente evidente a
prima vista.

Kiuhnm

unread,
Mar 28, 2013, 5:11:53 PM3/28/13
to
On 3/28/2013 21:09, Elio Fabri wrote:
> Kiuhnm ha scritto:
>> La documentazione ufficiale Python dice:
>> ...
>> E potrei citarne mille altre...
> Nessun dubbio su questo. Ma lo trovo irrilevante.
> Non ritengo che caclolatrici, software o linguaggi debbano essere presi
> come autorit� in materia di correttezza logica, anzi proprio l'opposto.
> Ci si possono trovare vere e proprie oscenit�, che hnno una
> giustificazione pratica, ma da un punto di vista matematico oscenit�
> restano.
> Per mio conto, anche senza fare ricerche nei miei vecchi levori di
> programmazione sono certo che troverei anche impieghi dello XOR fra
> tipi numerici. Ma questo non dimostra niente.

Non sono d'accordo. Qui entriamo nel campo dell'informatica e i
linguaggi di programmazione sono autorit� belle e buone.
Tutti i linguaggi di programmazione definiscono lo xor tra tipi interi
perch� � l'unica cosa sensata da fare.

> Ecco: gi� scrivere 1100b = 12 da un punto di vista logico � un
> pasticcio...

Non lo � affatto.

> Ma comunque, per tagliare la testa al toro: fammi un esempio di
> applicazione dell'operatore XOR fra numeri, che non sia in realt� un
> modo (comodo, sintetico quanto vuoi) di fare in realt� uno XOR fra
> stringhe binarie.
> Preciso meglio: riesci a trovare un solo caso in cui lo XOR fra numeri
> abbia un impiego pratico, se non come espressione di un'operazione
> bitwise fra le loro rappresentazioni binarie, dove quella che in realt�
> serve � proprio l'operazione fra stringhe binarie? (es. operazioni su
> maschere).

Irrilevante. La definizione dello xor � quella e basta.

Kiuhnm

Kiuhnm

unread,
Mar 28, 2013, 5:22:46 PM3/28/13
to
On 3/28/2013 22:11, Kiuhnm wrote:
> On 3/28/2013 21:09, Elio Fabri wrote:
>> Kiuhnm ha scritto:
>>> La documentazione ufficiale Python dice:
>>> ...
>>> E potrei citarne mille altre...
>> Nessun dubbio su questo. Ma lo trovo irrilevante.
>> Non ritengo che caclolatrici, software o linguaggi debbano essere presi
>> come autorit� in materia di correttezza logica, anzi proprio l'opposto.
>> Ci si possono trovare vere e proprie oscenit�, che hnno una
>> giustificazione pratica, ma da un punto di vista matematico oscenit�
>> restano.
>> Per mio conto, anche senza fare ricerche nei miei vecchi levori di
>> programmazione sono certo che troverei anche impieghi dello XOR fra
>> tipi numerici. Ma questo non dimostra niente.
>
> Non sono d'accordo. Qui entriamo nel campo dell'informatica e i
> linguaggi di programmazione sono autorit� belle e buone.
> Tutti i linguaggi di programmazione definiscono lo xor tra tipi interi
> perch� � l'unica cosa sensata da fare.

Mathematica, per la cronaca, fa lo stesso e cio� definisce le operazioni
bitwise tra interi. In particolare, gli interi possono avere un numero
illimitato di cifre.

Certo che � grossa che dei matematici o fisici pretendano di insegnare a
un informatico come devono essere definiti gli oggetti in informatica.
A sto punto pensatela come vi pare. Mica mi pagano per convincervi.

Kiuhnm

Tommaso Russo, Trieste

unread,
Mar 28, 2013, 7:07:48 PM3/28/13
to
Il 28/03/2013 21:25, Adam Atkinson ha scritto:
> On Mar 28, 8:09 pm, Elio Fabri <elio.fa...@tiscali.it> wrote:
>
>> Preciso meglio: riesci a trovare un solo caso in cui lo XOR fra numeri
>> abbia un impiego pratico, se non come espressione di un'operazione
>> bitwise fra le loro rappresentazioni binarie, dove quella che in realtᅵ
>> serve ᅵ proprio l'operazione fra stringhe binarie? (es. operazioni su
>> maschere).
>
> L'aritmetica Nim. Dal modo in cui e' definita la somma Nim non e'
> affatto evidente che sia lo XOR.

Mah... "normale somma nel sistema binario ma tralasciando i riporti."

0 nim 0 = 0
0 nim 1 = 1
1 nim 0 = 1
1 nim 1 = 0

Mi pare evidentissimo.


> E' vero che per calcolare la somma Nim piu' o meno chiunque pensa in
> termini dello XOR ma non nasce come un'operazione fra stringhe
> binarie.

E invece no. Perche' il *valore numerico* della somma nim non ti
interessa minimamente. Tutto quello che ti interessa e' che dopo la tua
mossa sia zero.

Il che significa che il numero degli elementi di ogni pila, nella
rappresentazione binaria, deve dare in totale un numero pari di unita',
un numero pari di coppie, un numero pari di quaterne, un numero pari di
ottine, e cosi' via. Questo ti da' la garanzia che ogni mossa del tuo
avversario sparigliera' almeno una delle suddette parita', e che tu
sarai comunque in grado di ripareggiarle tutte, fino alla vittoria.

La rappresentazione binaria dei numeri ti serve solo a calcolare il
numero di unita', coppie, quaterne, ottine eccetera di ogni pila:
potresti semplicemente mettere tutti i conteggi in un array di array di
interi, ordinati dalle ottine all'unita', o viceversa, o anche in ordine
alfabetico dal nome posizionale (c o q u); sommarle in un array di
totali, e verificare se dopo la tua mossa le somme divengano tutte pari.
Se ne lasciassi una o piu' dispari, regaleresti la vittoria all'avversario.

Lo XOR e' semplicemente una scorciatoia per il controllo delle parita',
e il risultato non ha alcun significato numerico: tant'e' che, per
farlo, potresti incolonnare i numeri che trovi dalla cifra binaria meno
significativa alla piu' significativa, little endian, anziche' usando
l'usuale big endian. Le somme nim diverse da zero che troveresti
sarebbero diverse, ma il metodo funzionerebbe egualmente bene.

Ti do' atto comunque del fatto che, per uno che gioca a Nim, poter
disporre di una calcolatrice che accetta la richiesta 5 XOR 3 XOR 18 XOR
7 gli farebbe comodo :-)


> Tu la conoscerai, ma magari qualcun altro no:
>
> il "minimo escluso", mex, di un insieme di interi non-negativi e' il
> numero non-negativo minore non presente nell'insieme. mex({})=0,
> mex({0,1,3})=2, per esempio.
>
> La somma Nim di due interi non-negativi a e b e':
>
> a nim b = mex({tutti numeri della forma "a' nim b" e "a nim b'" dove
> a'<a, b'<b}).

Non vedo l'utilita' di questo teorema :-) Comunque, qui invece
l'endianess la supponi implicitamente (probabilmente dando per scontato
che si debba usare the big one), nel momento stesso in cui scrivi "<".


--
TRu-TS
Buon vento e cieli sereni

Tommaso Russo, Trieste

unread,
Mar 28, 2013, 8:03:12 PM3/28/13
to
Il 28/03/2013 22:22, Kiuhnm ha scritto:
> On 3/28/2013 22:11, Kiuhnm wrote:
>> On 3/28/2013 21:09, Elio Fabri wrote:

>>> Non ritengo che calcolatrici, software o linguaggi debbano essere presi
>>> come autoritᅵ in materia di correttezza logica, anzi proprio l'opposto.
>>> Ci si possono trovare vere e proprie oscenitᅵ, che hanno una
>>> giustificazione pratica, ma da un punto di vista matematico oscenitᅵ
>>> restano.

>> Non sono d'accordo. Qui entriamo nel campo dell'informatica e i
>> linguaggi di programmazione sono autoritᅵ belle e buone.
>> Tutti i linguaggi di programmazione definiscono lo xor tra tipi interi
>> perchᅵ ᅵ l'unica cosa sensata da fare.

La cosa piu' sensata sarebbe di definirlo fra array di N bit.

Definirla fra tipi interi e' una scorciatoia tecnica dettata dalla
necessita' di economizzare sul numero di tipi diversi, che presenta due
inconvenienti:

1) un array di N bit *non* e' equivalente alla rappresentazione binaria
di un numero compreso fra 0 e 2^N-1. Per diventarlo, occorre definire
convenzionalmente un suo ordine (quindi indicizzarlo numericamente e
non, ad esempio, concettualmente con concetti espressi da vocaboli
traducibili fra lingue diverse) e una endianess (il bit 0 corrisponde
alla cifra binaria piu' significativa e l'N-1 a quella meno
significativa, o viceversa? Architetture diverse usano endianess
diverse, qualcuna addirittura mista :-( ne sanno qualcosa tutti quelli
che hanno cercato di trasferire file di dati binari via internet, che
trasmette per convenzione i byte in ordine di indirizzo in memoria...)

Questo inconveniente viene normalmente superato identificando i bit,
nelle maschere, con il numero intero 2^n (0<n<N).

2) i tipi interi hanno lunghezza fissa, 8, 16, 32, 64, mentre gli array
potrebbero richiedere un numero di bit diverso. Ora, e' ben vero che se
occorre gestire un array di 5 bit tutti i programmatori sanno
immagazzinarlo in un byte da 8 bit, farci operazioni bitwise e poi
ignorare i bit "non usati", pero'...

> Mathematica, per la cronaca, fa lo stesso e cioᅵ definisce le operazioni
> bitwise tra interi. In particolare, gli interi possono avere un numero
> illimitato di cifre.

... ecco, appunto. Cosa ti aspetti che restituisca Mathematica, e cosa
effettivamente restituisce, come output di

12 XOR NOT 28 ?

15?
239?
65519?
4294967279?
18446744073709551599?


> Certo che ᅵ grossa che dei matematici o fisici pretendano di insegnare a
> un informatico come devono essere definiti gli oggetti in informatica.

1) Ti sorge il dubbio che fra quanti frequentano un NG di Matematica (e
Fisica) ci possa essere anche qualche docente di Informatica?

2) La trattazione formale dell' Informatica E' Matematica, anche se poi
l'implementazione di sistemi adotta alcuni compromessi e scorciatoie
sulla base di necessita' tecnico/economiche contingenti (e che talvolta,
anzi spesso, si pagano ben piu' care nello sviluppo e manutenzione
successivi). Non assegnare a risultati di compromessi tecnici la stessa
dignita' delle basi teoriche.


> A sto punto pensatela come vi pare. Mica mi pagano per convincervi.

Sei stato invitato a riflettere. E aggratis.

Kiuhnm

unread,
Mar 28, 2013, 9:38:34 PM3/28/13
to
On 3/29/2013 1:03, Tommaso Russo, Trieste wrote:
> Il 28/03/2013 22:22, Kiuhnm ha scritto:
>> On 3/28/2013 22:11, Kiuhnm wrote:
>>> On 3/28/2013 21:09, Elio Fabri wrote:
>
>>>> Non ritengo che calcolatrici, software o linguaggi debbano essere presi
>>>> come autorit� in materia di correttezza logica, anzi proprio l'opposto.
>>>> Ci si possono trovare vere e proprie oscenit�, che hanno una
>>>> giustificazione pratica, ma da un punto di vista matematico oscenit�
>>>> restano.
>
>>> Non sono d'accordo. Qui entriamo nel campo dell'informatica e i
>>> linguaggi di programmazione sono autorit� belle e buone.
>>> Tutti i linguaggi di programmazione definiscono lo xor tra tipi interi
>>> perch� � l'unica cosa sensata da fare.
>
> La cosa piu' sensata sarebbe di definirlo fra array di N bit.
>
> Definirla fra tipi interi e' una scorciatoia tecnica dettata dalla
> necessita' di economizzare sul numero di tipi diversi, che presenta due
> inconvenienti:

Non � questo il motivo. Il motivo � che i primi linguaggi di
programmazione si discostavano poco dall'asm sia per motivi di
efficienza che di appetibilit�.
Le cose sono rimaste tali tanto a lungo da diventare prassi anche in
linguaggi di alto livello come Python e Mathematica per i quali non
sussistono pi� motivazioni tecniche.

> 1) un array di N bit *non* e' equivalente alla rappresentazione binaria
> di un numero compreso fra 0 e 2^N-1. Per diventarlo, occorre definire
> convenzionalmente un suo ordine (quindi indicizzarlo numericamente e
> non, ad esempio, concettualmente con concetti espressi da vocaboli
> traducibili fra lingue diverse) e una endianess (il bit 0 corrisponde
> alla cifra binaria piu' significativa e l'N-1 a quella meno
> significativa, o viceversa? Architetture diverse usano endianess
> diverse, qualcuna addirittura mista :-( ne sanno qualcosa tutti quelli
> che hanno cercato di trasferire file di dati binari via internet, che
> trasmette per convenzione i byte in ordine di indirizzo in memoria...)
>
> Questo inconveniente viene normalmente superato identificando i bit,
> nelle maschere, con il numero intero 2^n (0<n<N).
>
> 2) i tipi interi hanno lunghezza fissa, 8, 16, 32, 64, mentre gli array
> potrebbero richiedere un numero di bit diverso. Ora, e' ben vero che se
> occorre gestire un array di 5 bit tutti i programmatori sanno
> immagazzinarlo in un byte da 8 bit, farci operazioni bitwise e poi
> ignorare i bit "non usati", pero'...

Questi e altri problemi vengono risolti da linguaggi come Python e
Mathematica che sono platform-independent.
Per gli altri linguaggi di basso e medio livello esistono gli standard:
basta consultarli.

>> Mathematica, per la cronaca, fa lo stesso e cio� definisce le operazioni
>> bitwise tra interi. In particolare, gli interi possono avere un numero
>> illimitato di cifre.
>
> ... ecco, appunto. Cosa ti aspetti che restituisca Mathematica, e cosa
> effettivamente restituisce, come output di
>
> 12 XOR NOT 28 ?
>
> 15?
> 239?
> 65519?
> 4294967279?
> 18446744073709551599?

-17, ovviamente.

>> Certo che � grossa che dei matematici o fisici pretendano di insegnare a
>> un informatico come devono essere definiti gli oggetti in informatica.
>
> 1) Ti sorge il dubbio che fra quanti frequentano un NG di Matematica (e
> Fisica) ci possa essere anche qualche docente di Informatica?

Mi riferivo a interlocutori particolari.

> 2) La trattazione formale dell' Informatica E' Matematica, anche se poi
> l'implementazione di sistemi adotta alcuni compromessi e scorciatoie
> sulla base di necessita' tecnico/economiche contingenti (e che talvolta,
> anzi spesso, si pagano ben piu' care nello sviluppo e manutenzione
> successivi). Non assegnare a risultati di compromessi tecnici la stessa
> dignita' delle basi teoriche.

Che ti piaccia o no, l'informatica non � come il resto della matematica
e quelli che tu chiami compromessi plasmano anche la teoria.
Gli operatori bitwise si studiano nel corso "Architettura dei
calcolatori" e i miei colleghi ricordano benissimo l'esame dove si
chiedeva di eseguire operazioni bitwise tra interi da convertire da
decimale a binario, ecc...

>> A sto punto pensatela come vi pare. Mica mi pagano per convincervi.
>
> Sei stato invitato a riflettere. E aggratis.

Io invece ci terrei a essere pagato ora :\

Kiuhnm

Kiuhnm

unread,
Mar 28, 2013, 10:16:15 PM3/28/13
to
On 3/29/2013 1:03, Tommaso Russo, Trieste wrote:
> Definirla fra tipi interi e' una scorciatoia tecnica dettata dalla
> necessita' di economizzare sul numero di tipi diversi, che presenta due
> inconvenienti:
>
> 1) un array di N bit *non* e' equivalente alla rappresentazione binaria
> di un numero compreso fra 0 e 2^N-1. Per diventarlo, occorre definire
> convenzionalmente un suo ordine (quindi indicizzarlo numericamente e
> non, ad esempio, concettualmente con concetti espressi da vocaboli
> traducibili fra lingue diverse) e una endianess (il bit 0 corrisponde
> alla cifra binaria piu' significativa e l'N-1 a quella meno
> significativa, o viceversa? Architetture diverse usano endianess
> diverse, qualcuna addirittura mista :-( ne sanno qualcosa tutti quelli
> che hanno cercato di trasferire file di dati binari via internet, che
> trasmette per convenzione i byte in ordine di indirizzo in memoria...)
>
> Questo inconveniente viene normalmente superato identificando i bit,
> nelle maschere, con il numero intero 2^n (0<n<N).

Qui stai facendo confusione. L'endianness � irrilevante per quanto
riguarda shift e operatori bitwise. L'endianness riguarda solo il layout
dei dati nella memoria e non l'ordine logico dei bit. In altre parole,
partendo da valori interi uguali ed eseguendo le stesse operazioni su
CPU con diversa endianness, si ottengono risultati uguali.
I problemi si hanno solo quando si trasferiscono porzioni di dati da un
sistema all'altro.

Kiuhnm

Adam Atkinson

unread,
Mar 29, 2013, 1:15:56 AM3/29/13
to
On Mar 28, 11:07 pm, "Tommaso Russo, Trieste" <tru...@tin.it> wrote:

> > E' vero che per calcolare la somma Nim piu' o meno chiunque pensa in
> > termini dello XOR ma non nasce come un'operazione fra stringhe
> > binarie.
>
> E invece no. Perche' il *valore numerico* della somma nim non ti
> interessa minimamente.

Se stai calcolando i valori delle posizioni di altri giochi
combinatori come il Kayles
o altri giochi ottali per esempio, si' che ti interessa il valore
numerico della somma nim.

> > La somma Nim di due interi non-negativi a e b e':
>
> > a nim b = mex({tutti numeri della forma "a' nim b" e "a nim b'" dove
> > a'<a, b'<b}).
>
> Non vedo l'utilita' di questo teorema :-)

Beh, questa e' la _definizione_ della somma nim. Una volta che sai che
e' uguale a XOR
uso lo XOR e certamente non la definizione. Ma se stai analizzando
altri giochi imparziali
(come il Kayles ecc.) bisogna partire dalla definizione del valore di
una posizione con mex e tutto.

gaga

unread,
Mar 29, 2013, 7:03:05 AM3/29/13
to

"Elio Fabri" <elio....@tiscali.it> ha scritto nel messaggio
news:arjmk6...@mid.individual.net...

>Non ritengo che caclolatrici, software o linguaggi debbano essere presi
>come autorit� in materia di correttezza logica, anzi proprio l'opposto.

Infatti tanti giornalisti deficienti esaltano "algoritmi" come tali,
indipendentemente dalla dimostrazione che ne risultino i risultati che
emettono.



Luca85

unread,
Mar 29, 2013, 8:22:10 AM3/29/13
to
On 27 Mar, 17:47, Kiuhnm <kiuhnm03.4t.yahoo.it> wrote:

> La documentazione ufficiale Python dice:
>    "The ^ operator yields the bitwise XOR (exclusive OR) of its
> arguments, which must be plain or long integers."
> La documentazione Microsoft del C dice:
>    "The operands of bitwise operators must have integral types, but
> their types can be different."
> E potrei citarne mille altre...

Qua intendono intero come "variabile informatica di tipo int". Infatti
è richiesto che i due numeri siano rappresentati dallo stesso numero
di bit per poter fare lo xor.
Infatti una delle varie definizioni di bitwise operation che ho
trovato cercando su google dice:
"A bitwise operation operates on one or more bit patterns or binary
numerals at the level of their individual bits".
E le altre definizioni parlano tutte di "bit patterns or bynary
numerals".
Per il resto non mi esprimo, non ne so abbastanza, lascio spazio a chi
ne sa (direi molto) più di me.
Mi interessa abbastanza la parte di cui sta parlando Adam Atkinson con
Tommaso Russo, ma non ne capisco abbastanza di nim e affini.

Kiuhnm

unread,
Mar 29, 2013, 9:01:56 AM3/29/13
to
On 3/29/2013 13:22, Luca85 wrote:
> On 27 Mar, 17:47, Kiuhnm <kiuhnm03.4t.yahoo.it> wrote:
>
>> La documentazione ufficiale Python dice:
>> "The ^ operator yields the bitwise XOR (exclusive OR) of its
>> arguments, which must be plain or long integers."
>> La documentazione Microsoft del C dice:
>> "The operands of bitwise operators must have integral types, but
>> their types can be different."
>> E potrei citarne mille altre...
>
> Qua intendono intero come "variabile informatica di tipo int".

No. Intendono operandi di tipo intero (short int, int, long int, long
long int, ecc...).

> Infatti
> � richiesto che i due numeri siano rappresentati dallo stesso numero
> di bit per poter fare lo xor.

"... but their types can be different" quindi no, non � richiesto.
Inoltre Python e Mathematica supportano interi (dove i negativi sono in
complemento a 2) arbitrariamente grandi.

> Infatti una delle varie definizioni di bitwise operation che ho
> trovato cercando su google dice:
> "A bitwise operation operates on one or more bit patterns or binary
> numerals at the level of their individual bits".
> E le altre definizioni parlano tutte di "bit patterns or bynary
> numerals".

Certo, ma questi pattern vengono dati in input come numeri interi e non
direttamente come stringhe binarie. Per es. si pu� scrivere
(a+b) xor c
proprio perch� lo xor opera su interi.
Inoltre lavorando su interi anzich� direttamente sulle stringhe di bit,
� possibile lavorare con un numero infinito di bit in modo agevole.
Per es. not 28 � semplicemente -29 anzich� una stringa di infiniti 1.

Kiuhnm

Luca85

unread,
Mar 29, 2013, 1:16:09 PM3/29/13
to
On 29 Mar, 14:01, Kiuhnm <kiuhnm03.4t.yahoo.it> wrote:

> No. Intendono operandi di tipo intero (short int, int, long int, long
> long int, ecc...).

E che ho detto io?
Intendevo esattamente questo!

> "... but their types can be different" quindi no, non è richiesto.
> Inoltre Python e Mathematica supportano interi (dove i negativi sono in
> complemento a 2) arbitrariamente grandi.

Vabbè.... allungano il più corto dei due con zeri per portarlo allo
stesso formato e fanno l'operazione.


> Certo, ma questi pattern vengono dati in input come numeri interi e non
> direttamente come stringhe binarie. Per es. si può scrivere
>    (a+b) xor c
> proprio perché lo xor opera su interi.

Le volte che ho usato lo xor bitwise in input l'ho sempre dato in
binario!! Proprio perchè altrimenti avrei dovuto prima su carta
covnertirlo in decimale.
Che poi nella rappresentazione su computer scrivere il decimale od il
binario sia equivalente è un conto. Ma questo non cambia il problema
che l'operazione bitwise, come dice la parola stessa, sia
un'operazione logica fatta singolarmente su coppie di bit. (anche se
son bit che fan parte di altro)

> Inoltre lavorando su interi anziché direttamente sulle stringhe di bit,
> è possibile lavorare con un numero infinito di bit in modo agevole.
> Per es. not 28 è semplicemente -29 anziché una stringa di infiniti 1.

not 28 è 29 solo ed esclusivamente dopo che hai definito la
convenzione con cui rappresenti gli interi ed i negativi. Non vale
generalmente in matematica!! Anzi... spesso non è definita!
(anzi... In C e in MATLAB per me è quotidianità fare not(Intero) nel
senso di ottenere 1 se l'intero è 0 e 1 se l'intero è non-zero.
Improprio finchè vuoi... ma 1) funziona 2) non è meno improprio che
not(28)=-29!)
E' una pura convenzione di alcune rappresentazioni informatiche. Non è
una "verità matematica".
Per quanto pure io nel programmare PIC abbia usato il not di un numero
nel senso di prenderne il complemento. Ma non è necessariamente così!!
(come ti ho dimostrato con un controesempio d'uso decisamente comune!!)

Kiuhnm

unread,
Mar 29, 2013, 2:22:33 PM3/29/13
to
On 3/29/2013 18:16, Luca85 wrote:
> On 29 Mar, 14:01, Kiuhnm <kiuhnm03.4t.yahoo.it> wrote:
>
>> No. Intendono operandi di tipo intero (short int, int, long int, long
>> long int, ecc...).
>
> E che ho detto io?
> Intendevo esattamente questo!

"int" � solo uno dei tipi interi.

>> "... but their types can be different" quindi no, non � richiesto.
>> Inoltre Python e Mathematica supportano interi (dove i negativi sono in
>> complemento a 2) arbitrariamente grandi.
>
> Vabb�.... allungano il pi� corto dei due con zeri per portarlo allo
> stesso formato e fanno l'operazione.

Non proprio: si ripete il bit pi� significativo altrimenti perdi il segno.

>> Certo, ma questi pattern vengono dati in input come numeri interi e non
>> direttamente come stringhe binarie. Per es. si pu� scrivere
>> (a+b) xor c
>> proprio perch� lo xor opera su interi.
>
> Le volte che ho usato lo xor bitwise in input l'ho sempre dato in
> binario!! Proprio perch� altrimenti avrei dovuto prima su carta
> covnertirlo in decimale.
> Che poi nella rappresentazione su computer scrivere il decimale od il
> binario sia equivalente � un conto. Ma questo non cambia il problema
> che l'operazione bitwise, come dice la parola stessa, sia
> un'operazione logica fatta singolarmente su coppie di bit. (anche se
> son bit che fan parte di altro)

Tu confondi rappresentazione con oggetto rappresentato.
Quando in un codice sorgente scrivi per es.
12345 + 6789
quello che fai � indicare la somma tra due interi rappresentati in base
10 dalle stringhe 12345 e 6789. Non stai facendo la somma tra le
stringhe 12345 e 6789. L'operatore somma prende interi, non stringhe.
Lo stesso vale per l'operatore XOR come definito nel 99.9% dei linguaggi
di programmazione.
E con questa fanno 6 o 7 volte che lo ripeto.
Inoltre, per coerenza, si pu� notare che anche l'operatore somma come
definito nei linguaggi di programmazione si pu� spiegare soltanto
pensando alla rappresentazione binaria dei numeri interi, quindi,
secondo quanto sostenete tu ed altri, non ha senso scrivere
12345 + 6789
perch� l'operatore '+' opera sui bit. Per es. 127+1 pu� benissimo fare -128.

>> Inoltre lavorando su interi anzich� direttamente sulle stringhe di bit,
>> � possibile lavorare con un numero infinito di bit in modo agevole.
>> Per es. not 28 � semplicemente -29 anzich� una stringa di infiniti 1.
>
> not 28 � 29 solo ed esclusivamente dopo che hai definito la
> convenzione con cui rappresenti gli interi ed i negativi. Non vale
> generalmente in matematica!!

"Generalmente in matematica" vale tutto e niente.

> Anzi... spesso non � definita!
> (anzi... In C e in MATLAB per me � quotidianit� fare not(Intero) nel
> senso di ottenere 1 se l'intero � 0 e 1 se l'intero � non-zero.

Quello � il not LOGICO. Non c'entra con quello BITWISE.
Comunque quella pratica � "frowned upon" e andrebbe evitata perch�
riduce la leggibilit�.

> Improprio finch� vuoi... ma 1) funziona 2) non � meno improprio che
> not(28)=-29!)
> E' una pura convenzione di alcune rappresentazioni informatiche. Non �
> una "verit� matematica".
> Per quanto pure io nel programmare PIC abbia usato il not di un numero
> nel senso di prenderne il complemento. Ma non � necessariamente cos�!!
> (come ti ho dimostrato con un controesempio d'uso decisamente comune!!)

Mi hai dimostrato solo di avere le idee confuse.

Kiuhnm

Luca85

unread,
Mar 30, 2013, 1:00:47 PM3/30/13
to
On 29 Mar, 19:22, Kiuhnm <kiuhnm03.4t.yahoo.it> wrote:
>
> Tu confondi rappresentazione con oggetto rappresentato.
> Quando in un codice sorgente scrivi per es.
>    12345 + 6789

Ma qua dubitavamo sulla buona definizione in matematica di una
operazione, non della sua implementazione/implementabilità algoritmica
in informatica.
Quando io parlo di somma parlo di somma come definita dall'aritmetica
di Peano, assolutamente generale, non di seguenza di and e xor tra
stringhe ordinate di bit con delle convenioni stabilite/da stabilirsi
necessariamente per riporti e negativi!!!

> Lo stesso vale per l'operatore XOR come definito nel 99.9% dei linguaggi
> di programmazione.

E come operazione in senso assoluto?

E' questo il mio dubbio, non sulla calcolabilità dello xor tra "int" e
affini in informatica dopo aver stabilito come rappresenti gli interi,
i negativi etc!!

> > not 28 è 29 solo ed esclusivamente dopo che hai definito la
> > convenzione con cui rappresenti gli interi ed i negativi. Non vale
> > generalmente in matematica!!
>
> "Generalmente in matematica" vale tutto e niente.

L'operazione "bitwise not" nell'insieme N non mi pare sia comunemente
inserita tra le standard. Poi visto che in matematica è sempre tutto
definibile non potevo non mettere il "Generalmente".
Ma io posso pure ridefinire gli ordinamenti negli insiemi per ottenere
risultati strambi/inutili. Ma di solito devo specificarlo a priori che
sto usando cose non standard.
Un po' come la distanza. Dò per scontato che, a meno non venga
esplicitato, che sia quella euclidea!!

> Quello è il not LOGICO. Non c'entra con quello BITWISE.
> Comunque quella pratica è "frowned upon" e andrebbe evitata perché
> riduce la leggibilità.

Errore mio qua.
(e fa niente se è frowned upon)

Kiuhnm

unread,
Mar 30, 2013, 1:30:02 PM3/30/13
to
On 3/30/2013 18:00, Luca85 wrote:
> On 29 Mar, 19:22, Kiuhnm <kiuhnm03.4t.yahoo.it> wrote:
>>
>> Tu confondi rappresentazione con oggetto rappresentato.
>> Quando in un codice sorgente scrivi per es.
>> 12345 + 6789
>
> Ma qua dubitavamo sulla buona definizione in matematica di una
> operazione, non della sua implementazione/implementabilit� algoritmica
> in informatica.
> Quando io parlo di somma parlo di somma come definita dall'aritmetica
> di Peano, assolutamente generale, non di seguenza di and e xor tra
> stringhe ordinate di bit con delle convenioni stabilite/da stabilirsi
> necessariamente per riporti e negativi!!!

Ma lo XOR bitwise non � mai esistito nella matematica classica che io
sappia. Ormai � tardi per dire che linguaggi e software definiscono lo
XOR in modo insensato.
Non ho fatto altro che sostenere, dall'inizio del thread, che � lecito
aspettarsi che una calcolatrice permetta di eseguire lo xor tra numeri
scritti in notazione decimale perch� la rappresentazione � irrilevante.
I software hanno sempre scisso rappresentazione da valore rappresentato.
Direi che � tardi per cambiare. Gli informatici sono abituati cos�.
Inoltre � comodo quindi perch� cambiare?

>> Lo stesso vale per l'operatore XOR come definito nel 99.9% dei linguaggi
>> di programmazione.
>
> E come operazione in senso assoluto?

Il fatto � che in senso assoluto non � mai esistita. Ogni definizione
che si pu� leggere in rete � comunque postuma alle innumerevoli
implementazioni in CPU, ecc...

> E' questo il mio dubbio, non sulla calcolabilit� dello xor tra "int" e
> affini in informatica dopo aver stabilito come rappresenti gli interi,
> i negativi etc!!

La differenza � che spesso i linguaggi implementano (a volte
stravolgendo) cose che esistono gi�. Qui gli operatori bitwise sono
stati praticamente inventati sul momento.
Se vogliamo, � la teoria matematica che ha iniziato a descriverli quando
gi� esistevano.

Kiuhnm

Tommaso Russo, Trieste

unread,
Mar 30, 2013, 6:53:06 PM3/30/13
to
Il 29/03/2013 02:38, Kiuhnm ha scritto:
> On 3/29/2013 1:03, Tommaso Russo, Trieste wrote:

>> La cosa piu' sensata sarebbe di definirlo fra array di N bit.
>>
>> Definirla fra tipi interi e' una scorciatoia tecnica dettata dalla
>> necessita' di economizzare sul numero di tipi diversi, che presenta due
>> inconvenienti:
>
> Non ᅵ questo il motivo. Il motivo ᅵ che i primi linguaggi di
> programmazione si discostavano poco dall'asm sia per motivi di
> efficienza che di appetibilitᅵ.
> Le cose sono rimaste tali tanto a lungo da diventare prassi anche in
> linguaggi di alto livello come Python e Mathematica per i quali non
> sussistono piᅵ motivazioni tecniche.

E' vero, effettivamente anche noi abbiamo un'inutile appendice del colon
e un residuo di coda nell'osso sacro...

Ma le prassi, *anche se funzionano*, non e' detto che siano *corrette* e
quindi che non comportino pericoli. Vedi sotto.


> Questi e altri problemi vengono risolti da linguaggi come Python e
> Mathematica che sono platform-independent.

OK: finche' resti nel loro ambito.

> Per gli altri linguaggi di basso e medio livello esistono gli standard:
> basta consultarli.

Eh... "La cosa bella degli standard e' che ce ne sono tanti tra cui
scegliere." (Andrew Stuart Tanenbaum)


>>> Mathematica, per la cronaca, fa lo stesso e cioᅵ definisce le operazioni
>>> bitwise tra interi. In particolare, gli interi possono avere un numero
>>> illimitato di cifre.
>>
>> ... ecco, appunto. Cosa ti aspetti che restituisca Mathematica, e cosa
>> effettivamente restituisce, come output di
>>
>> 12 XOR NOT 28 ?

Chiedo scusa a tutti: ho scritto 12 XOR NOT 28, ma i calcoli poi li ho
fatti con 28 XOR NOT 12. Poco male, visto che Kiuhnm non ha rifatto il
calcolo, ma ha convertito in binario i miei risultati e individuato il
pattern comune ;-)

la domanda doveva essere quindi:
output di Mathematica per 28 XOR NOT 12?

>> 15?
>> 239?
>> 65519?
>> 4294967279?
>> 18446744073709551599?

> -17, ovviamente.

Eh, eh... la risposta e' brillante, perche' supera l'obiezione di dover
PREdefinire la lunghezza degli array di bit su cui agire: evidentemente
Mathematica implementa gli interi relativi in precisione multipla con
liste di bit (o anche di byte, la granularita' ha poca importanza) e
quando necessario le allunga alla bisogna, propagando agli elementi
aggiunti il bit piu' significativo.

Ma el tacon xe pezo che el buso :-)

Perche' il risultato "-17" non si basa solo sulla convenzione per cui un
array ordinato di bit puo' essere interpretato come la rappresentazione
in cifre binarie di un intero non negativo, che ha solide basi
matematiche (*), ma *anche* sulla convenzione che riguarda la codifica
del segno.

Mathematica usa evidentemente il complemento a 2, e credo proprio che lo
faccia indipendentemente dall'architettura della cpu su cui gira, per
cui finche' si rimane nell'ambito di Mathematica i risultati rimangono
coerenti. Ma la convenzione "complemento a due", per quanto *oggi* molto
diffusa (**), non e' certamente l'unica:

http://en.wikipedia.org/wiki/Signed_number_representations

per cui, se scrivi un codice che contenga, piu' o meno,

int i = 12;
...
if (28 xor ~ i == -17){printf ... }

e lo fai girare su macchine con diversa architettura, su alcune
architetture la printf verra' eseguita, su altre NO.


(*) ma io ho lavorato anche con CPU, IBM serie 360/20, in cui l'unica
rappresentazione possibile in memoria era il BCD: ogni nibble (mezzo
byte da 8 bit) conteneva una cifra *decimale*; l'eventuale segno "-" era
un F nel nibble finale :-)

(**) e ho lavorato con ben due CPU con complemento a 1, CDC serie 6000 e
Univac serie 1101 (leggi "tredici", eh! :-).


>> 2) La trattazione formale dell' Informatica E' Matematica, anche se poi
>> l'implementazione di sistemi adotta alcuni compromessi e scorciatoie
>> sulla base di necessita' tecnico/economiche contingenti (e che talvolta,
>> anzi spesso, si pagano ben piu' care nello sviluppo e manutenzione
>> successivi). Non assegnare a risultati di compromessi tecnici la stessa
>> dignita' delle basi teoriche.
>
> Che ti piaccia o no, l'informatica non ᅵ come il resto della matematica
> e quelli che tu chiami compromessi plasmano anche la teoria.

Ma questo e' proprio il "peccato originale" dell'Informatica, che si e'
cercato di superare, negli anni '70-'90, con la sua formalizzazione: per
farne una tecnologia ingegneristica basata su solide basi scientifiche,
e non piu' un'"arte". ("The art of computing programming" non e' l'arte
di *scrivere* software, ma l'arte di determinare le soluzioni
informatiche a un problema.)

Hai mai scritto *esplicitamente* la dimostrazione di correttezza di una
routine?

Se la tua routine usa features dell'hardware di basso livello, come ad
esempio la rappresentazione del segno nei signed integer, allora fra le
ipotesi *devono entrare anche* queste: ed e' sin troppo facile darle per
scontate e dimenticarle. Il risultato e' spesso una routine che funziona
correttamente su un'architettura, ma esibisce ostinatamente misteriosi
bug quando viene portata su un'altra.

Chi programma in modo difensivo *testa*, all'inizio di ogni routine, che
siano verificate le ipotesi (sia sugli argomenti di input che
sull'architettura) usate nella dimostrazione; e se non lo sono, call
abort(). Ma i test sull'architettura sono decisamente troppo costosi per
metterli all'inizio di ogni routine; e per di piu', prevenirebbero i bug
da porting prevenendo proprio la portabilita'.

La soluzione sta nell'uso di strutture dati astratte perfettamente
calzanti il problema (per questo ho detto: array (o liste) di bit
piuttosto che integer), lasciando agli scrittori di compilatori e/o
librerie hardware dependent il compito di implementarle tenendo conto di
un'architettura (che, *loro* si', devono conoscere molto bene) e di
testare le ipotesi fatte sull'architettura e usate nella dimostrazione
una sola volta, alla prima esecuzione.


> Gli operatori bitwise si studiano nel corso "Architettura dei
> calcolatori" e i miei colleghi ricordano benissimo l'esame dove si
> chiedeva di eseguire operazioni bitwise tra interi da convertire da
> decimale a binario, ecc...

Confermo. (Hanno forse usato il Tanenbaum? E' quello che usiamo qui a
Trieste).

Ma li' si mettono a confronto, appunto, *diverse* architetture,
nell'ottica proprio di saper implementare una struttura astratta usando
le istruzioni e le rappresentazioni dati di basso livello. Compito,
appunto, dei programmatori di sistemi operativi, compilatori e librerie.

(Poi, certo, se un programmatore a livello piu' alto, per memorizzare un
array di 6 o 12 bit, usera' i bit meno significativi di un UNSIGNED
integer di 8 o 16 bit, nessuno gli sparera' per questo... :-) Ma deve
rendersi conto che sta camminando sul ciglio di un burrone.)


> Io invece ci terrei a essere pagato ora :\

Ah, ma lo fai per professione? ;-)

Io ormai sono in pensione e mi ci continuo a divertire. Mi auguro che ti
ci diverta anche tu... :-)

Kiuhnm

unread,
Mar 30, 2013, 8:57:01 PM3/30/13
to
On 3/30/2013 23:53, Tommaso Russo, Trieste wrote:
> Il 29/03/2013 02:38, Kiuhnm ha scritto:
>> Per gli altri linguaggi di basso e medio livello esistono gli standard:
>> basta consultarli.
>
> Eh... "La cosa bella degli standard e' che ce ne sono tanti tra cui
> scegliere." (Andrew Stuart Tanenbaum)

Dato il linguaggio, lo standard � unico (a parte le dovute revisioni)!

> Eh, eh... la risposta e' brillante, perche' supera l'obiezione di dover
> PREdefinire la lunghezza degli array di bit su cui agire: evidentemente
> Mathematica implementa gli interi relativi in precisione multipla con
> liste di bit (o anche di byte, la granularita' ha poca importanza) e
> quando necessario le allunga alla bisogna, propagando agli elementi
> aggiunti il bit piu' significativo.

Mathematica fa di pi�, infatti capisce che
x xor x xor 3 = 3

> Ma el tacon xe pezo che el buso :-)
>
> Perche' il risultato "-17" non si basa solo sulla convenzione per cui un
> array ordinato di bit puo' essere interpretato come la rappresentazione
> in cifre binarie di un intero non negativo, che ha solide basi
> matematiche (*), ma *anche* sulla convenzione che riguarda la codifica
> del segno.

... che ha ugualmente solide basi matematiche.

> Mathematica usa evidentemente il complemento a 2, e credo proprio che lo
> faccia indipendentemente dall'architettura della cpu su cui gira, per
> cui finche' si rimane nell'ambito di Mathematica i risultati rimangono
> coerenti. Ma la convenzione "complemento a due", per quanto *oggi* molto
> diffusa (**), non e' certamente l'unica:

Ma la documentazione di Mathematica lo dice espressamente.

> http://en.wikipedia.org/wiki/Signed_number_representations
>
> per cui, se scrivi un codice che contenga, piu' o meno,
>
> int i = 12;
> ...
> if (28 xor ~ i == -17){printf ... }
>
> e lo fai girare su macchine con diversa architettura, su alcune
> architetture la printf verra' eseguita, su altre NO.

Ma gli standard del C e C++ lo dicono che � cos�.

> (*) ma io ho lavorato anche con CPU, IBM serie 360/20, in cui l'unica
> rappresentazione possibile in memoria era il BCD: ogni nibble (mezzo
> byte da 8 bit) conteneva una cifra *decimale*; l'eventuale segno "-" era
> un F nel nibble finale :-)
>
> (**) e ho lavorato con ben due CPU con complemento a 1, CDC serie 6000 e
> Univac serie 1101 (leggi "tredici", eh! :-).

Ah, mi sa che sono pi� giovane!

>>> 2) La trattazione formale dell' Informatica E' Matematica, anche se poi
>>> l'implementazione di sistemi adotta alcuni compromessi e scorciatoie
>>> sulla base di necessita' tecnico/economiche contingenti (e che talvolta,
>>> anzi spesso, si pagano ben piu' care nello sviluppo e manutenzione
>>> successivi). Non assegnare a risultati di compromessi tecnici la stessa
>>> dignita' delle basi teoriche.
>>
>> Che ti piaccia o no, l'informatica non � come il resto della matematica
>> e quelli che tu chiami compromessi plasmano anche la teoria.
>
> Ma questo e' proprio il "peccato originale" dell'Informatica, che si e'
> cercato di superare, negli anni '70-'90, con la sua formalizzazione: per
> farne una tecnologia ingegneristica basata su solide basi scientifiche,
> e non piu' un'"arte". ("The art of computing programming" non e' l'arte
> di *scrivere* software, ma l'arte di determinare le soluzioni
> informatiche a un problema.)

Non credo che il problema fosse lo xor...

> Hai mai scritto *esplicitamente* la dimostrazione di correttezza di una
> routine?

Yep. Ho anche programmato in linguaggi funzionali dove ci� era pi� agevole.

> Se la tua routine usa features dell'hardware di basso livello, come ad
> esempio la rappresentazione del segno nei signed integer, allora fra le
> ipotesi *devono entrare anche* queste: ed e' sin troppo facile darle per
> scontate e dimenticarle. Il risultato e' spesso una routine che funziona
> correttamente su un'architettura, ma esibisce ostinatamente misteriosi
> bug quando viene portata su un'altra.

E quindi? Siamo partiti dallo xor. Non so quanto tu voglia ancora
allargare il discorso!

> Chi programma in modo difensivo *testa*, all'inizio di ogni routine, che
> siano verificate le ipotesi (sia sugli argomenti di input che
> sull'architettura) usate nella dimostrazione; e se non lo sono, call
> abort(). Ma i test sull'architettura sono decisamente troppo costosi per
> metterli all'inizio di ogni routine; e per di piu', prevenirebbero i bug
> da porting prevenendo proprio la portabilita'.

Chi fa le cose per bene separa parti portabili da parti non portabili,
altroch�!

> La soluzione sta nell'uso di strutture dati astratte perfettamente
> calzanti il problema (per questo ho detto: array (o liste) di bit
> piuttosto che integer), lasciando agli scrittori di compilatori e/o
> librerie hardware dependent il compito di implementarle tenendo conto di
> un'architettura (che, *loro* si', devono conoscere molto bene) e di
> testare le ipotesi fatte sull'architettura e usate nella dimostrazione
> una sola volta, alla prima esecuzione.

Questo renderebbe linguaggi come C, C++ e D completamente inutili, visto
che gli unici motivi per usarli sono:
1) accesso diretto all'hardware
2) efficienza del codice
Se vuoi produttivit� e portabilit� vai su altri linguaggi.

>> Gli operatori bitwise si studiano nel corso "Architettura dei
>> calcolatori" e i miei colleghi ricordano benissimo l'esame dove si
>> chiedeva di eseguire operazioni bitwise tra interi da convertire da
>> decimale a binario, ecc...
>
> Confermo. (Hanno forse usato il Tanenbaum? E' quello che usiamo qui a
> Trieste).

Dispense del prof. :)

> Io ormai sono in pensione e mi ci continuo a divertire. Mi auguro che ti
> ci diverta anche tu... :-)

Io sto passando al machine learning. Meno ingegneria del software e pi�
matematica!

Kiuhnm
0 new messages