Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Other Discussions
  3. The Weird and The Wonderful
  4. zero int?

zero int?

Scheduled Pinned Locked Moved The Weird and The Wonderful
question
41 Posts 13 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • N Nagy Vilmos

    b10543748 wrote:

    Int32 contador;
    // contador = (Int32)0;

    ftfy The second line is pointless.


    Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett

    L Offline
    L Offline
    Lost User
    wrote on last edited by
    #6

    A method to try it is written quickly. If the method only contains this declaration, it would work, but also be somewhat useless. Then add a single line that uses the variable and see what the compiler says :) The second line is not pointless at all, at least if you intend to use the variable. If not, why declare it in the first place?

    And from the clouds a mighty voice spoke:
    "Smile and be happy, for it could come worse!"

    And I smiled and was happy
    And it came worse.

    N 1 Reply Last reply
    0
    • L Lost User

      A method to try it is written quickly. If the method only contains this declaration, it would work, but also be somewhat useless. Then add a single line that uses the variable and see what the compiler says :) The second line is not pointless at all, at least if you intend to use the variable. If not, why declare it in the first place?

      And from the clouds a mighty voice spoke:
      "Smile and be happy, for it could come worse!"

      And I smiled and was happy
      And it came worse.

      N Offline
      N Offline
      Nagy Vilmos
      wrote on last edited by
      #7

      Sorry, I was misreading it. Int32 is an object type and so does need to be initialised in code; I was thinking of value type ints


      Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett

      L B 3 Replies Last reply
      0
      • N Nagy Vilmos

        Sorry, I was misreading it. Int32 is an object type and so does need to be initialised in code; I was thinking of value type ints


        Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett

        L Offline
        L Offline
        Lost User
        wrote on last edited by
        #8

        Int32 is a struct, not a class, making it a value type and not a reference type. It's also the underlying type in the framework for int, as far as I know you can use them synonymously.

        And from the clouds a mighty voice spoke:
        "Smile and be happy, for it could come worse!"

        And I smiled and was happy
        And it came worse.

        P 1 Reply Last reply
        0
        • N Nagy Vilmos

          Sorry, I was misreading it. Int32 is an object type and so does need to be initialised in code; I was thinking of value type ints


          Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett

          L Offline
          L Offline
          Lost User
          wrote on last edited by
          #9

          It isn't, as noted, but it also wouldn't matter if it were. Local variables of reference types also "have to" be initialized. That is, they must satisfy the Definite Assignment rules. If it were a field in a struct/class or an array-element it wouldn't have to be initialized, but that is the case for any type; they're always set to default(type) in those cases.

          1 Reply Last reply
          0
          • N Nagy Vilmos

            Sorry, I was misreading it. Int32 is an object type and so does need to be initialised in code; I was thinking of value type ints


            Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett

            B Offline
            B Offline
            BobJanova
            wrote on last edited by
            #10

            int is a C# alias for the CLR type Int32, both refer to the same (value) type. You're thinking of Java's Integer and friends. And even with a reference class, you can't use a local variable before it's been explicitly assigned.

            1 Reply Last reply
            0
            • L Lost User

              Int32 is a struct, not a class, making it a value type and not a reference type. It's also the underlying type in the framework for int, as far as I know you can use them synonymously.

              And from the clouds a mighty voice spoke:
              "Smile and be happy, for it could come worse!"

              And I smiled and was happy
              And it came worse.

              P Offline
              P Offline
              PIEBALDconsult
              wrote on last edited by
              #11

              Well, actually, we don't know... it could be an Acme.Int32, the provided code doesn't specify. :rolleyes:

              L 1 Reply Last reply
              0
              • P PIEBALDconsult

                Well, actually, we don't know... it could be an Acme.Int32, the provided code doesn't specify. :rolleyes:

                L Offline
                L Offline
                Lost User
                wrote on last edited by
                #12

                True. In that case it would be a horror. Using a class or a struct with the name of a type defined in the framework without fully qualifiying the type to point out that it is not the type you would normally assume it to be, is downright deceptive. To be able to do that you also have to leave out the system namespace where the type in question is located and only use the namespace where the 'Acme' type is located. Include both and you have no choice but to fully qualify the types in your code.

                And from the clouds a mighty voice spoke:
                "Smile and be happy, for it could come worse!"

                And I smiled and was happy
                And it came worse.

                R 1 Reply Last reply
                0
                • L Lost User

                  True. In that case it would be a horror. Using a class or a struct with the name of a type defined in the framework without fully qualifiying the type to point out that it is not the type you would normally assume it to be, is downright deceptive. To be able to do that you also have to leave out the system namespace where the type in question is located and only use the namespace where the 'Acme' type is located. Include both and you have no choice but to fully qualify the types in your code.

                  And from the clouds a mighty voice spoke:
                  "Smile and be happy, for it could come worse!"

                  And I smiled and was happy
                  And it came worse.

                  R Offline
                  R Offline
                  Reiss
                  wrote on last edited by
                  #13

                  I have just made this code up to show how horrific you can make it Define my own type using a name defined in the framework

                  namespace Dummy
                  {
                  public class Int32
                  {
                  public Int32()
                  {
                  }

                      public string Value
                      {
                          get;
                          set;
                      }
                  }
                  

                  }

                  Implement it somewhere

                  using system = Dummy; // note the lower case 's'

                  namespace AnotherDummy
                  {
                  public class Class1
                  {
                  public Class1()
                  {
                  string value = "Hello";

                          system.Int32 x = new system.Int32();
                          x.Value = value;
                      }
                  }
                  

                  }

                  L 2 Replies Last reply
                  0
                  • R Reiss

                    I have just made this code up to show how horrific you can make it Define my own type using a name defined in the framework

                    namespace Dummy
                    {
                    public class Int32
                    {
                    public Int32()
                    {
                    }

                        public string Value
                        {
                            get;
                            set;
                        }
                    }
                    

                    }

                    Implement it somewhere

                    using system = Dummy; // note the lower case 's'

                    namespace AnotherDummy
                    {
                    public class Class1
                    {
                    public Class1()
                    {
                    string value = "Hello";

                            system.Int32 x = new system.Int32();
                            x.Value = value;
                        }
                    }
                    

                    }

                    L Offline
                    L Offline
                    Lost User
                    wrote on last edited by
                    #14

                    Long ago we did our best to write misleading code with help of the C preprocessor. Then Java came along and they celebrated the end of such malicious practices. C# has a preprocessor (as all directives beginning with '#' clearly show), but it is harder to use in a destructive way. Still, your example shows that it was not the preprocessor that was the root of all evil.

                    And from the clouds a mighty voice spoke:
                    "Smile and be happy, for it could come worse!"

                    And I smiled and was happy
                    And it came worse.

                    1 Reply Last reply
                    0
                    • R Reiss

                      I have just made this code up to show how horrific you can make it Define my own type using a name defined in the framework

                      namespace Dummy
                      {
                      public class Int32
                      {
                      public Int32()
                      {
                      }

                          public string Value
                          {
                              get;
                              set;
                          }
                      }
                      

                      }

                      Implement it somewhere

                      using system = Dummy; // note the lower case 's'

                      namespace AnotherDummy
                      {
                      public class Class1
                      {
                      public Class1()
                      {
                      string value = "Hello";

                              system.Int32 x = new system.Int32();
                              x.Value = value;
                          }
                      }
                      

                      }

                      L Offline
                      L Offline
                      Lost User
                      wrote on last edited by
                      #15

                      That's bad, but it can be worse:

                      namespace Dummy
                      {
                      public struct Int32
                      {
                      int val;

                      private Int32(int v)
                      {
                      	val = v;
                      }
                      
                      public static implicit operator Int32(int x)
                      {
                      	return new Int32(x - 3);
                      }
                      
                      public static implicit operator int(Int32 x)
                      {
                      	return x.val;
                      }
                      
                      public static Int32 operator \*(Int32 a, Int32 b)
                      {
                      	return new Int32(a.val \* (b.val + 1));
                      }
                      
                      // etc
                      }
                      

                      }

                      R 1 Reply Last reply
                      0
                      • L Lost User

                        That's bad, but it can be worse:

                        namespace Dummy
                        {
                        public struct Int32
                        {
                        int val;

                        private Int32(int v)
                        {
                        	val = v;
                        }
                        
                        public static implicit operator Int32(int x)
                        {
                        	return new Int32(x - 3);
                        }
                        
                        public static implicit operator int(Int32 x)
                        {
                        	return x.val;
                        }
                        
                        public static Int32 operator \*(Int32 a, Int32 b)
                        {
                        	return new Int32(a.val \* (b.val + 1));
                        }
                        
                        // etc
                        }
                        

                        }

                        R Offline
                        R Offline
                        Reiss
                        wrote on last edited by
                        #16

                        +5 - That's just plain awful :)

                        1 Reply Last reply
                        0
                        • L Lost User

                          The declaration and initialisation could of course have been done in one line, but that makes little difference. From this I get the impression that the developer who wrote this is very 'modern'. He probably has no idea what the compiler will generate from those simple code lines and added the type cast just in case this assignment might be problematic. Ironically, assingning zero to a variable of a numeric type is the most unproblematic case of all, since it turns out to be one or more zero bytes, no matter if we are looking at an integer type, a floating point type, signed or unsigned. The compiler knows the size (in bytes) of the variable the value is assigned to and there are no special ways to represent the number 'zero'. Therefore no special type information is needed in the assignment. Bottom line: I see this as clumsy code, but not as a real horror. It does what it is supposed to and I see no potentially harmful side effects. However, I would also see it as an indicator that the developer should perhaps learn more about what happens under the hood, even if that's not 'modern'.

                          And from the clouds a mighty voice spoke:
                          "Smile and be happy, for it could come worse!"

                          And I smiled and was happy
                          And it came worse.

                          C Offline
                          C Offline
                          Chris Berger
                          wrote on last edited by
                          #17

                          CDP1802 wrote:

                          Ironically, assingning zero to a variable of a numeric type is the most unproblematic case of all, since it turns out to be one or more zero bytes, no matter if we are looking at an integer type, a floating point type, signed or unsigned.

                          That's definitely true of assigning 0 to a variable. But there's a related case that's problematic: sqlParams.Add(new SqlParameter("Quantity", 0)); Acutally assigns the "Quantity" parameter a value of null, because apparently this fits the definition for

                          SqlParameter(string parameterType, SqlDbType dbType)

                          better than it does for

                          SqlParamter(string parameterType, object value)

                          because 0 is a valid value for the enum SqlDbType and any match is a better match than object. To assign a value of 0, you have to do: sqlParams.Add(new SqlParameter("Quantity", Convert.ToInt32(0))); (as for why you would do this... well, I'd rather not go into it...) So maybe the original coder was confused by that very specific case? ...probably not...

                          1 Reply Last reply
                          0
                          • L Lost User

                            The declaration and initialisation could of course have been done in one line, but that makes little difference. From this I get the impression that the developer who wrote this is very 'modern'. He probably has no idea what the compiler will generate from those simple code lines and added the type cast just in case this assignment might be problematic. Ironically, assingning zero to a variable of a numeric type is the most unproblematic case of all, since it turns out to be one or more zero bytes, no matter if we are looking at an integer type, a floating point type, signed or unsigned. The compiler knows the size (in bytes) of the variable the value is assigned to and there are no special ways to represent the number 'zero'. Therefore no special type information is needed in the assignment. Bottom line: I see this as clumsy code, but not as a real horror. It does what it is supposed to and I see no potentially harmful side effects. However, I would also see it as an indicator that the developer should perhaps learn more about what happens under the hood, even if that's not 'modern'.

                            And from the clouds a mighty voice spoke:
                            "Smile and be happy, for it could come worse!"

                            And I smiled and was happy
                            And it came worse.

                            G Offline
                            G Offline
                            greldak
                            wrote on last edited by
                            #18

                            Ironically, assingning zero to a variable of a numeric type is the most unproblematic case of all, since it turns out to be one or more zero bytes, no matter if we are looking at an integer type, a floating point type, signed or unsigned. The compiler knows the size (in bytes) of the variable the value is assigned to and there are no special ways to represent the number 'zero'. Therefore no special type information is needed in the assignment.

                            assuming you aren't needing to deal with the IEEE arithmetic concepts of +0 and -0

                            L B 3 Replies Last reply
                            0
                            • G greldak

                              Ironically, assingning zero to a variable of a numeric type is the most unproblematic case of all, since it turns out to be one or more zero bytes, no matter if we are looking at an integer type, a floating point type, signed or unsigned. The compiler knows the size (in bytes) of the variable the value is assigned to and there are no special ways to represent the number 'zero'. Therefore no special type information is needed in the assignment.

                              assuming you aren't needing to deal with the IEEE arithmetic concepts of +0 and -0

                              L Offline
                              L Offline
                              Lost User
                              wrote on last edited by
                              #19

                              Where would that apply? Floating point types?

                              And from the clouds a mighty voice spoke:
                              "Smile and be happy, for it could come worse!"

                              And I smiled and was happy
                              And it came worse.

                              K 1 Reply Last reply
                              0
                              • G greldak

                                Ironically, assingning zero to a variable of a numeric type is the most unproblematic case of all, since it turns out to be one or more zero bytes, no matter if we are looking at an integer type, a floating point type, signed or unsigned. The compiler knows the size (in bytes) of the variable the value is assigned to and there are no special ways to represent the number 'zero'. Therefore no special type information is needed in the assignment.

                                assuming you aren't needing to deal with the IEEE arithmetic concepts of +0 and -0

                                L Offline
                                L Offline
                                Lost User
                                wrote on last edited by
                                #20

                                Even then +0 is just "all bits zero". It's just -0 that is slightly odd there.

                                J 1 Reply Last reply
                                0
                                • G greldak

                                  Ironically, assingning zero to a variable of a numeric type is the most unproblematic case of all, since it turns out to be one or more zero bytes, no matter if we are looking at an integer type, a floating point type, signed or unsigned. The compiler knows the size (in bytes) of the variable the value is assigned to and there are no special ways to represent the number 'zero'. Therefore no special type information is needed in the assignment.

                                  assuming you aren't needing to deal with the IEEE arithmetic concepts of +0 and -0

                                  B Offline
                                  B Offline
                                  BobJanova
                                  wrote on last edited by
                                  #21

                                  I think all zero bits in a float represents zero too (zero value and zero exponent).

                                  L A K 3 Replies Last reply
                                  0
                                  • B BobJanova

                                    I think all zero bits in a float represents zero too (zero value and zero exponent).

                                    L Offline
                                    L Offline
                                    Lost User
                                    wrote on last edited by
                                    #22

                                    That's the way I remembered it since the stone age.

                                    And from the clouds a mighty voice spoke:
                                    "Smile and be happy, for it could come worse!"

                                    And I smiled and was happy
                                    And it came worse.

                                    1 Reply Last reply
                                    0
                                    • B BobJanova

                                      I think all zero bits in a float represents zero too (zero value and zero exponent).

                                      A Offline
                                      A Offline
                                      AspDotNetDev
                                      wrote on last edited by
                                      #23

                                      Indeed. I think there are multiple other ways to represent +-0 (e.g., if the significand is 0, any exponent should produce a result of -0 or +0, depending on the sign bit), though all zeroes should work.

                                      Somebody in an online forum wrote:

                                      INTJs never really joke. They make a point. The joke is just a gift wrapper.

                                      L 1 Reply Last reply
                                      0
                                      • B b10543748

                                        Int32 contador;
                                        contador = (Int32)0;

                                        and a store procedure with +/- 2600 lines.

                                        F Offline
                                        F Offline
                                        Fabio Franco
                                        wrote on last edited by
                                        #24

                                        b10543748 wrote:

                                        a store procedure with +/- 2600 lines.

                                        That's the real horror here. It gives me goose bumps just to think about it.

                                        b10543748 wrote:

                                        Int32 contador; contador = (Int32)0;

                                        I think that deserves the hall of shame, just for the fact that the person that wrote this probably had no idea what he was doing. But, what if, historically this code looked like this:

                                        Int32 contador;
                                        contador = (Int32)3.2;

                                        And then, for whatever reason it was change to 0 and the cast was just kept. Or even:

                                        long outroContador = paramX * 1000000L;
                                        .
                                        .
                                        .
                                        Int32 contador;
                                        contador = (Int32)outroContador;

                                        So, maybe, just maybe, it was just a matter of safety.

                                        "To alcohol! The cause of, and solution to, all of life's problems" - Homer Simpson

                                        1 Reply Last reply
                                        0
                                        • A AspDotNetDev

                                          Indeed. I think there are multiple other ways to represent +-0 (e.g., if the significand is 0, any exponent should produce a result of -0 or +0, depending on the sign bit), though all zeroes should work.

                                          Somebody in an online forum wrote:

                                          INTJs never really joke. They make a point. The joke is just a gift wrapper.

                                          L Offline
                                          L Offline
                                          Lost User
                                          wrote on last edited by
                                          #25

                                          AspDotNetDev wrote:

                                          e.g., if the significand is 0, any exponent should produce a result of -0 or +0, depending on the sign bit

                                          No, that won't work. There is an implicit leading 1-bit when the exponent is not zero, so if the exponent is nonzero it can never represent zero. Also if the exponent is all ones you'd get infinity if the mantissa is zero.

                                          A 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups