Deutsch   English   Français   Italiano  
<v92gt1$e1l$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Bart <bc@freeuk.com>
Newsgroups: comp.lang.c
Subject: Re: how cast works?
Date: Thu, 8 Aug 2024 14:23:44 +0100
Organization: A noiseless patient Spider
Lines: 64
Message-ID: <v92gt1$e1l$1@dont-email.me>
References: <v8vlo9$2oc1v$1@dont-email.me> <slrnvb7kis.28a.dan@djph.net>
 <v929ah$3u7l7$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Thu, 08 Aug 2024 15:23:45 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="0ec5f4cd8f82378826952c114447df93";
	logging-data="14389"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+rpALVbBnbEafsAJ+ZsiV7"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:XpaiuS3ZPB2JyS41X0mlwTLF9+I=
In-Reply-To: <v929ah$3u7l7$1@dont-email.me>
Content-Language: en-GB
Bytes: 3079

On 08/08/2024 12:14, Thiago Adams wrote:
> On 07/08/2024 17:00, Dan Purgert wrote:
>> On 2024-08-07, Thiago Adams wrote:
>>> How cast works?
>>> Does it changes the memory?
>>> For instance, from "unsigned int" to "signed char".
>>> Is it just like discarding bytes or something else?
>>> [...]
>>
>> I don't know what happens when you're changing datatype lengths, but if
>> they're the same length, it's just telling the compiler what the
>> variable should be treated as (e.g. [8-bit] int to char)
>>
>>>
>>> I also would like to understand better signed and unsigned.
>>> There is no such think as "signed" or "unsigned" register, right?
>>
>> "Signed" just means the first bit indicates negative.
>>
>> So an "unsigned" 8 bit integer will have the 256 values ranging from
>>
>>   0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 = 0
>>        (0b00000000)
>>
>>                TO
>>
>>   128 + 64 + 32 + 16 + 8 +4 + 2 + 1 = 255
>>        (0b11111111)
>>
>>
>> Whereas a "signed" 8 bit integer will have the 256 values ranging from
>>
>>    (-128) + 0 + 0 + 0 + 0 + 0 + 0 + 0 = -128
>>        (0b10000000)
>>
>>                TO
>>
>>    0 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 127
>>        (0b01111111)
>>
>> At least in two's compliment (but that's the way it's done in C)
>>
>>
>>> How about floating point?
>>
>> Floating point is a huge mess, and has a few variations for encoding;
>> though I think most C implementations use the one from the IEEE on 1985
>> (uh, IEEE754, I think?)
>>
> 
> 
> 
> I didn't specify properly , but my question was more about floating 
> point registers. I think in this case they have specialized registers.


Try godbolt.org. Type in a fragment of code that does different kinds of 
casts (it needs to be well-formed, so inside a function), and see what 
code is produced with different C compilers.

Use -O0 so that the code isn't optimised out of existence, and so that 
you can more easily match it to the C source.