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.