<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>programancia101 : tipos de datos, avanzado</title><link>http://geeks.ms/blogs/programancia101/archive/tags/tipos+de+datos/avanzado/default.aspx</link><description>Etiquetas: tipos de datos, avanzado</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>el bug de multiplicacion de Excel 2007</title><link>http://geeks.ms/blogs/programancia101/archive/2007/09/28/el-bug-de-multiplicacion-de-Excel-2007.aspx</link><pubDate>Thu, 27 Sep 2007 23:14:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:37944</guid><dc:creator>phobeo</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/programancia101/rsscomments.aspx?PostID=37944</wfw:commentRss><comments>http://geeks.ms/blogs/programancia101/archive/2007/09/28/el-bug-de-multiplicacion-de-Excel-2007.aspx#comments</comments><description>
&lt;p&gt;Acabo de aterrizar de Ibiza de unas minivacaciones impresionantes (y en las cuales de paso he escrito un par de problemas nuevos para programancia101!) asi que no he podido seguir en directo la serie de articulos que han aparecido en la blogosfera acerca de un bug en Excel 2007. Afortunadamente, mi amigo &lt;a href="http://www.elladodelmal.com" target="_blank"&gt;Chema &amp;quot;el maligno&amp;quot;&lt;/a&gt; me ha mandado un correito para asegurarse que nos haciamos eco de esta noticia.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;Para los que no lo hayais visto ya, resulta que se ha encontrado un &lt;a href="http://groups.google.com/group/microsoft.public.excel/browse_thread/thread/2bcad1a1a4861879/2f8806d5400dfe22?hl=en#2f8806d5400dfe22" target="_blank"&gt;pequeño bug en Excel 2007&lt;/a&gt; (&lt;a href="http://www.microsiervos.com/archivo/ordenadores/bug-excel-2007.html" target="_blank"&gt;noticia en español en Microsiervos&lt;/a&gt;) con algunas multiplicaciones. Podeis encontrar mas ejemplillos por la web, pero el aviso original se referia a la multiplicacion 850 * 77.1, que en vez de 65535, que es el &lt;a href="http://www.google.es/search?q=850*77.1" target="_blank"&gt;resultado correcto&lt;/a&gt;, se muestra como 100000.&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://es.wikipedia.org/wiki/%C3%81baco_neperiano" target="_blank"&gt;&amp;nbsp;&lt;img src="http://geeks.ms/photos/programancia101/images/37959/original.aspx" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como buenos lectores de programancia101 y revisando algunos de nuestros articulos anteriores (como &lt;a href="http://geeks.ms/blogs/programancia101/archive/2007/01/31/numeros-bestias-y-descuentos.aspx" target="_blank"&gt;este&lt;/a&gt; y &lt;a href="http://geeks.ms/blogs/programancia101/archive/2007/02/01/expansiones-infinitas.aspx" target="_blank"&gt;este&lt;/a&gt;), &lt;b&gt;&lt;font color="#009966"&gt;seriais capaces de adivinar cual es la hipotesis razonable mas probable que puede causar este tipo de fallo?&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Para los que quieran directamente &amp;quot;la solucion&amp;quot;, podeis mirar &lt;a href="http://blogs.msdn.com/excel/archive/2007/09/25/calculation-issue-update.aspx" target="_blank"&gt;este post del equipo de Excel&lt;/a&gt;, que se puso manos a la obra para arreglarlo el dia despues del aviso.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=37944" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/programancia101/archive/tags/avanzado/default.aspx">avanzado</category><category domain="http://geeks.ms/blogs/programancia101/archive/tags/tipos+de+datos/default.aspx">tipos de datos</category><category domain="http://geeks.ms/blogs/programancia101/archive/tags/depuracion/default.aspx">depuracion</category><category domain="http://geeks.ms/blogs/programancia101/archive/tags/ingenieria+inversa/default.aspx">ingenieria inversa</category><category domain="http://geeks.ms/blogs/programancia101/archive/tags/ejemplo+real/default.aspx">ejemplo real</category></item><item><title>contando hacia atras</title><link>http://geeks.ms/blogs/programancia101/archive/2007/01/05/contando-hacia-atras.aspx</link><pubDate>Fri, 05 Jan 2007 09:50:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:8255</guid><dc:creator>phobeo</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/programancia101/rsscomments.aspx?PostID=8255</wfw:commentRss><comments>http://geeks.ms/blogs/programancia101/archive/2007/01/05/contando-hacia-atras.aspx#comments</comments><description>&lt;P&gt;Vaya, este artículo debería haberlo publicado hace unos días, cuando muchos de vosotros sí que os estábais preparando para la cuenta atrás... de final de año, claro. Espero que me perdonéis, pero estoy un poco griposillo así que no me ha dado instancia a dedicar tiempo a escribir.&lt;/P&gt;
&lt;P&gt;Aun así: ¡aprovecho para felicitaros a todos desde aquí y desear que los 0x757B12C00 milisegundos de este 2007 os sean propicios! }:)&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://www.flickr.com/photos/dps/" target=_blank&gt;&lt;IMG src="http://geeks.ms/photos/programancia101/images/8260/original.aspx" border=0&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://geeks.ms/photos/programancia101/picture8259.aspx" target=_blank&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;El caso es que, continuando&amp;nbsp;con el emocionante&amp;nbsp;tema de los tipos de datos, he pensado en dejaros un pequeño puzzler para empezar el año. Os recuerdo que la idea de los puzzlers es responder a las preguntas sobre el código &lt;STRONG&gt;sin ejecutarlo primero&lt;/STRONG&gt; (y si sois capaces ademas de saber qué hace, saber el &lt;STRONG&gt;por qué&lt;/STRONG&gt;... ¡son gallifantes extra!)&lt;/P&gt;
&lt;P&gt;Al igual que en el problema anterior, &lt;STRONG&gt;podéis publicar la solución en vuestro blog y enlazarla&lt;/STRONG&gt; desde un comentario aquí &lt;STRONG&gt;o bien enviarlas directamente como comentario&lt;/STRONG&gt; del artículo. En cualquier caso, intentaremos comentar la solución entre todos }:)&lt;/P&gt;
&lt;P&gt;Pero basta ya de preámbulos: la idea es que tenemos estos tres pedacitos de código:&lt;/P&gt;
&lt;P&gt;
&lt;TABLE style="WIDTH:100%;" cellSpacing=1 cellPadding=1 align=center&gt;

&lt;TR&gt;
&lt;TD&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;pedacito #1&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;int&lt;/SPAN&gt; counter &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; (&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;int&lt;/SPAN&gt;)1e8;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;while&lt;/SPAN&gt;(counter &amp;gt; 0) {&lt;BR&gt;counter--;&lt;BR&gt;}&lt;BR&gt;Console.WriteLine(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:#666666;FONT-FAMILY:Courier New;BACKGROUND-COLOR:#e4e4e4;"&gt;"counter: "&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;+&lt;/SPAN&gt; counter);&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;
&lt;TABLE style="WIDTH:100%;" cellSpacing=1 cellPadding=1 align=center&gt;

&lt;TR&gt;
&lt;TD&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;pedacito #2&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;float&lt;/SPAN&gt; counter &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; (&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;float&lt;/SPAN&gt;)1e8;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;while&lt;/SPAN&gt;(counter &amp;gt; 0) {&lt;BR&gt;counter--;&lt;BR&gt;}&lt;BR&gt;Console.WriteLine(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:#666666;FONT-FAMILY:Courier New;BACKGROUND-COLOR:#e4e4e4;"&gt;"counter: "&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;+&lt;/SPAN&gt; counter);&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;
&lt;TABLE style="WIDTH:100%;" cellSpacing=1 cellPadding=1 align=center&gt;

&lt;TR&gt;
&lt;TD&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;pedacito #3&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;double&lt;/SPAN&gt; counter &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; (&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;double&lt;/SPAN&gt;)1e8;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;while&lt;/SPAN&gt;(counter &amp;gt; 0) {&lt;BR&gt;counter--;&lt;BR&gt;}&lt;BR&gt;Console.WriteLine(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:#666666;FONT-FAMILY:Courier New;BACKGROUND-COLOR:#e4e4e4;"&gt;"counter: "&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;+&lt;/SPAN&gt; counter);&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#009966&gt;¿Sabríais decir cuál será la salida de cada uno de ellos?&lt;/FONT&gt;&lt;/STRONG&gt; Y ya puestos: &lt;STRONG&gt;&lt;FONT color=#009966&gt;¿sabríais decir cuál tardará MENOS y cual MÁS en ejecutarse?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;NOTA:&lt;/STRONG&gt; tal y como estan expresados, estos pedacitos deberían ejecutarse sin problemas en C#, Java, C y C++ (&lt;FONT color=#000000&gt;simplemente&lt;/FONT&gt; cambiando la última línea por la llamada a&amp;nbsp;&lt;FONT face="Courier New"&gt;System.out.println&lt;/FONT&gt;,&lt;FONT face="Courier New"&gt; printf&lt;/FONT&gt; o &lt;FONT face="Courier New"&gt;cout &amp;lt;&amp;lt;&lt;/FONT&gt;&amp;nbsp;apropiada). ¡Siento no haber podido hacer versiones en otros lenguajes!&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=8255" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/programancia101/archive/tags/avanzado/default.aspx">avanzado</category><category domain="http://geeks.ms/blogs/programancia101/archive/tags/tipos+de+datos/default.aspx">tipos de datos</category><category domain="http://geeks.ms/blogs/programancia101/archive/tags/medio/default.aspx">medio</category><category domain="http://geeks.ms/blogs/programancia101/archive/tags/puzzler/default.aspx">puzzler</category></item><item><title>empezando por el principio</title><link>http://geeks.ms/blogs/programancia101/archive/2006/12/26/empezando-por-el-principio.aspx</link><pubDate>Tue, 26 Dec 2006 11:04:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:7892</guid><dc:creator>phobeo</dc:creator><slash:comments>23</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/programancia101/rsscomments.aspx?PostID=7892</wfw:commentRss><comments>http://geeks.ms/blogs/programancia101/archive/2006/12/26/empezando-por-el-principio.aspx#comments</comments><description>&lt;P&gt;Como en programancia101 estamos solo empezando, creo que lo más apropiado es empezar por el principio, pero claro, esto sería si hubiera un principio.&lt;/P&gt;
&lt;P&gt;Lo ideal sería poder identificar cuál es la habilidad más importante que debe tener un desarrollador y decir: &lt;EM&gt;"¡aha! éste es el truco y éste es el problema que necesitáis para afinar la capacidad X"&lt;/EM&gt;. Pero esto creo que es un problema bastante difícil. &lt;FONT color=#009966&gt;&lt;STRONG&gt;¿Cuál creéis vosotros que debería ser la habilidad número uno del buen programante?&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Yo he sido incapaz de decidirme sólo por una, pero sí que he visto una actitud común en muchos programantes avezados: no se conforman con saber que algo funciona, sino que quieren saber &lt;STRONG&gt;por qué&lt;/STRONG&gt; funciona, o&lt;STRONG&gt; por qué no&lt;/STRONG&gt; funciona, o &lt;STRONG&gt;por qué funciona mejor&lt;/STRONG&gt; en tal o cual caso. Saber este tipo de cosas está directamente relacionado con la curiosidad por conocer cómo maneja cada concepto "por dentro" nuestro lenguaje favorito, nuestro entorno, nuestro marco de trabajo...&lt;/P&gt;
&lt;P&gt;Una de las típicas&amp;nbsp;preguntas que suelen hacerse cuando&amp;nbsp;se quiere comprobar qué tal maneja alguien los conceptos desde el principio es: ¿sabes darle la vuelta? Sí, exactamente, darle la vuelta a las cosas es un procedimiento poco usual en la "programación estándar", pero nos viene al pelo para empezar a proponer el que se vean las cosas de un modo distinto&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://geeks.ms/photos/programancia101/images/7879/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;Vamos a plantear esta pregunta a distintos niveles:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;la idea más básica sería: &lt;FONT color=#009966&gt;&lt;STRONG&gt;¿sabrías escribir un trozo de código que reciba una cadena de texto y le dé la vuelta?&lt;/STRONG&gt;&lt;/FONT&gt; Es decir, si nuestra entrada es "abc",&amp;nbsp;la salida sería&amp;nbsp;"cba" 
&lt;LI&gt;Bajando un poco más dentro de nuestros tipos de datos: &lt;FONT color=#009966&gt;&lt;STRONG&gt;¿y un trozo de código que le de la vuelta a los bits de un byte?&lt;/STRONG&gt;&lt;/FONT&gt; Es decir, si la entrada es 1,&amp;nbsp;la salida sería&amp;nbsp;128 
&lt;LI&gt;Y para terminar, uno un poco más complejo: en C# (y muchos otros lenguajes) los tipos flotantes se representan mediante el estándar aritmético IEEE 754. &lt;FONT color=#009966&gt;&lt;STRONG&gt;¿Sabrías escribir un trozo de código que le de la vuelta a los bits del exponente y&amp;nbsp;la mantisa de esa representación IEEE 754?&lt;/STRONG&gt;&lt;/FONT&gt; Es decir, si la entrada es&amp;nbsp;-118,625, la salida sería -17.180.580.000 (nota: en español la coma "," es decimal y el punto "." el separador cada 3 números de la parte entera)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Podéis poner vuestras respuestas, preguntas o ideas en los comentarios o bien poner un post con la solución en vuestro propio blog y dejar aquí un enlace&lt;/STRONG&gt; (¡es mejor que mandármelas por mail, porque así todos podemos opinar!)&lt;/P&gt;
&lt;P&gt;Preparados, listos... ¡ya! }:)&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=7892" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/programancia101/archive/tags/avanzado/default.aspx">avanzado</category><category domain="http://geeks.ms/blogs/programancia101/archive/tags/tipos+de+datos/default.aspx">tipos de datos</category><category domain="http://geeks.ms/blogs/programancia101/archive/tags/medio/default.aspx">medio</category><category domain="http://geeks.ms/blogs/programancia101/archive/tags/algoritmos/default.aspx">algoritmos</category><category domain="http://geeks.ms/blogs/programancia101/archive/tags/basico/default.aspx">basico</category><category domain="http://geeks.ms/blogs/programancia101/archive/tags/bits/default.aspx">bits</category></item></channel></rss>