Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > static_cast<unsigned>

Reply
Thread Tools

static_cast<unsigned>

 
 
bonham
Guest
Posts: n/a
 
      06-08-2005
i m a beginner in C++. I have some questions:
what is static_cast<unsigned>?
i saw someone use static_cast<unsigned> and static_cast<unsigned char>
together. why?
e.g. static_cast<unsigned>(static_cast<unsigned char>(c))
(c is a char).

Thank you!

Bon

 
Reply With Quote
 
 
 
 
Me
Guest
Posts: n/a
 
      06-08-2005
> i m a beginner in C++. I have some questions:
> what is static_cast<unsigned>?
> i saw someone use static_cast<unsigned> and static_cast<unsigned char>
> together. why?
> e.g. static_cast<unsigned>(static_cast<unsigned char>(c))
> (c is a char).


Take an implementation where char ranges from -128 to 127, the cast
from char to unsigned char (on this implementation) converts it to the
range 0 to 255 and then the cast to unsigned int leaves it in that 0 to
255 range. Without the unsigned char cast there, converting the char to
an unsigned integer directly (lets say unsigned int ranges from 0 to
0xFFFF on this implementation) would convert it to either 0 to 127 if c
is positive or 0xFFFF+1-128 to 0xFFFF+1-1 if c is negative (all these
ranges here are inclusive).

So basically, it's because char isn't guaranteed to be signed or
unsigned, so we want to force it to become unsigned.

If the code is doing what I think it's trying to do, it's wrong in
general (but works on the majority of 2s complement computers, which is
why you see it in the wild). The correct way is static_cast<const
unsigned char&>(c) because you want to cast the bits of the character
and not the mathematical value of it.

 
Reply With Quote
 
 
 
 
bonham
Guest
Posts: n/a
 
      06-08-2005
Thanks! this answers more than i asked for.
I assume the "&" is there to ensure the cast of bits of character than
the mathematics value in static_cast<const unsigned char&>(c) rite?
why need the "const"?

 
Reply With Quote
 
bonham
Guest
Posts: n/a
 
      06-08-2005
Thanks! this answers more than i asked for.
I assume the "&" is there to ensure the cast of bits of character than
the mathematics value in static_cast<const unsigned char&>(c) rite?
why need the "const"?

 
Reply With Quote
 
Me
Guest
Posts: n/a
 
      06-08-2005
> Thanks! this answers more than i asked for.
> I assume the "&" is there to ensure the cast of bits of character than
> the mathematics value in static_cast<const unsigned char&>(c) rite?
> why need the "const"?


static_cast<const unsigned char&>(c) is the same thing (with added
semantics) as *static_cast<const unsigned char*>(&c) so you can see
you're basically intepreting memory a different way. The const is there
for two reasons 1. const safety
(http://www.parashift.com/c++-faq-lit...rrectness.html) and 2.
to allow for binding an r-value to a reference
(http://cpptips.hyperformix.com/cpptips/nconst_tmp_ref3)

 
Reply With Quote
 
Me
Guest
Posts: n/a
 
      06-08-2005
> char c;
> static_cast<const unsigned char&>(c)


Doh, strike that, that code shouldn't compile (I'm way too used to
VC6's broken compiler). The correct way is to get the unsigned bits is:

*static_cast<const unsigned char*>(static_cast<const void*>(&c)) or
*(const unsigned char*)(const void*)(&c).

Some people just do reinterpret_cast<unsigned char&>(c) or even just
(unsigned char&)(c). The C++ standard doesn't guarantee it works (the C
one does however). Personally, I always cast through void* just to play
it safe.

 
Reply With Quote
 
bonham
Guest
Posts: n/a
 
      06-08-2005
Thank you very much!

 
Reply With Quote
 
sparrow sparrow is offline
Junior Member
Join Date: Dec 2012
Posts: 1
 
      12-01-2012
what about the

static_cast<unsigned int>
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments