Article View: es.comp.lenguajes.java
Article #29830Complemento a 2
From: Chano G�mez
Date: Thu, 16 Oct 1997 00:00
Date: Thu, 16 Oct 1997 00:00
46 lines
2841 bytes
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-mailReferences:
<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