🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #29830

Complemento a 2

#29830
From: Chano G�mez
Date: Thu, 16 Oct 1997 00:00
46 lines
2841 bytes
> por pantalla FCSINIT. El resto de las variables que has asignado y
> pasan de 32767 te las va a asignar como negativas, con lo que...en
> fin, que esta mal.

:-)

Te puedo asegurar que me s� los rangos de los tipos, de verdad... ;-)

Java "cree" que son n�meros negativos. Pero "yo" s� que no lo son. Y a m� no
me importa lo que crea Java... Mejor dicho, no me importa lo que crea la
parte de Java encargada de sacar los numeritos por pantalla... :-)

Cometes el mismo error de concepto que el que escribi� el primer mensaje.

�l ya me hab�a preguntado antes sobre el problema de los "unsigned" por
e-mail. El no sab�a traducir el programa de C a Java porque Java no tiene
tipos "unsigned". Y cre�a que si met�a el valor de un "unsigned short" de C
dentro de una variable "short" de Java ocurrir�an desbordamientos y cambios
de signo y el programa no funcionar�a.

Los n�meros internamente se representan en complemento a dos. Los n�meros en
complemento a dos tienen la ventaja de que se suman con el mismo hardware
que los n�meros sin signo. Es el programador el que interpreta los datos. El
programa est� bien. Simplementa calcula un checksum de un array de datos.
Esos n�meros no son "con signo" o "sin signo", no son positivos ni
negativos. Son patrones de bits. Y las operaciones son correctas, porque
"yo" soy quien los interpreta. Para eso el ordenador es m�o...

Es m�s, por no haber, en mi programa no hay ni sumas ni restas. Solo ANDs y
shifts. Operaciones a nivel de bit, donde el signo nos trae totalmente sin
cuidado.

Si ejecutas el programa original en C (que usa unsigned chars y cosas de
esas) y mi programa en Java (que usa shorts y bytes "aparentemente" con
signo), ver�s que da el mismo resultado. Incluso el programa en C original
ten�a un error en la representaci�n final en pantalla de la comprobaci�n del
checksum que yo he corregido.

La �nica precauci�n que hay que tener es usar los desplazamientos "sin
signo" (operador '>>>') para que rellene con ceros por la derecha, en vez de
repetir el bit de signo (MSB), como hace el operador '>>'. Tambi�n hay que
meter m�scaras AND de vez en cuando para saltarse las promociones
autom�ticas de Java. Lo cual es un co�azo, pero nada insalvable.

Chano.
Technical Details
Message-ID: <3446895F.D508C8AA@ran.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <3441D205.4DE3@sinix.net> <3442954A.ADDB65F3@ran.es> <3446870d.2441022@news.mad.ibernet.es> <3444EC2C.2DCDCB9E@ran.es> <344f3985.4572596@news.mad.ibernet.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: 1116f3,460493a7622ba583
X-Google-Attributes: gid1116f3,public
From: "Chano G�mez" <chano@ran.es>
Subject: Complemento a 2
Date: 1997/10/16
Message-ID: <3446895F.D508C8AA@ran.es>
X-Deja-AN: 281147698
References: <3441D205.4DE3@sinix.net> <3442954A.ADDB65F3@ran.es> <3446870d.2441022@news.mad.ibernet.es> <3444EC2C.2DCDCB9E@ran.es> <344f3985.4572596@news.mad.ibernet.es>
Organization: Unisource Espana NEWS SERVER
Newsgroups: es.comp.lenguajes.java