Alguém pode explicar por que recebo essas saídas?

Sharim Iqbal |

Eu sou novo em c.

Minha pergunta.

Por que alguns números terminam negativos quando o valor era positivo? Por que alguns números pequenos acabam com uma magnitude enorme quando convertidos para não assinados?

#include <stdio.h>
#include <stdbool.h>
#include <limits.h>


void typecast(int a)
{
    unsigned b = (unsigned) a;
    unsigned char c = (unsigned char) a;
    char d = (char) a;
    unsigned long e = (unsigned long) a;
    long f = (long) a;
    
    printf(" %d : \n",a);
    printf(" ->unsigned int: %u\n",b);
    printf(" ->unsigned char (as decimal) %u\n",c);
    printf(" ->char (as decimal) %d\n",d);
    printf(" ->unsigned long: %lu\n",e);
    printf(" ->long: %ld\n",f);
}


int main()
{
    int num=0;
    printf("Enter an integer: ");
    scanf("%d", &num);
    typecast(num);
    
  return 0;
}

RESULTADO:

Enter an integer: 1000
1000 :
->unsigned int: 1000
->unsigned char (as decimal) 232
->char (as decimal) -24
->unsigned long: 1000
->long: 1000
Anton Tchekov

Aqui está uma explicação para a saída que você está vendo. 1000 em binário é 1111101000 (10 bits) e é armazenado em um int(32 bits assinado)

Quando você converte isso para um unsigned char(que tem 8 bits), os bits superiores são "cortados".

Então você obtém: 11101000que está 232em decimal.

Como um caractere (assinado), os bits são interpretados como um número negativo porque o primeiro bit (sinal) é definido, que neste caso é -24.

Ao remover o bit de sinal, 1101000=104

O "valor" do MSB é 128, então seu computador faz 104 - 128 = -24.

(Consulte https://en.wikipedia.org/wiki/Two%27s_complement )

Um long tem o mesmo ou mais bits que um int, então o valor não muda.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Alguém pode explicar por que recebo ConcurrentModificationException

Alguém pode explicar por que recebo essa saída em Python?

Alguém pode explicar por que recebo esse erro com os tipos?

Alguém pode explicar por que as saídas são diferentes em C e Java?

Alguém pode explicar por que a saída de True, True == (True, True) é (True, False)?

Alguém pode me explicar por que essa saída é dada?

Alguém pode explicar por que estou recebendo uma saída indefinida neste problema de leetcode?

Alguém pode explicar por que precisamos escalar no SpriteKit?

Por que essa afirmação é falsa? Alguém pode explicar

Alguém pode explicar por que isso não funciona?

Se eu substituir "arr[index]" por "arr[items]" recebo um array com os valores de [2, 0, 3, 4], alguém pode explicar o que está acontecendo

Alguém pode explicar essas notações do modelo Erwin?

Alguém pode explicar como essas classes de bootstrap funcionam

Alguém pode explicar essas linhas neste código?

Alguém pode me explicar como essas exceções funcionam?

Alguém pode me explicar por que usamos parênteses em torno das condições em javaScript

Alguém pode explicar a saída?

Alguém pode explicar o que é maxBit?

Por que preciso dessas chaves aqui? Alguém pode me explicar por que isso acontece?

Alguém pode explicar essas funções visto que não consegui encontrar nenhuma descrição na documentação oficial

alguém pode explicar por que não consigo retornar um valor desse método?

Alguém pode me explicar por que esse segundo método não atualiza totalmente a string?

Alguém pode explicar por que GOPATH é conveniente e como deve ser usado em geral?

Alguém pode explicar por que meu enredo Python não mostra nada?

alguém pode explicar por que os links .asp apresentam comportamento estranho?

Alguém pode explicar por que 4 & 0xFFFF - 1 ainda é 4?

Alguém pode explicar por que essa maneira de iterar uma estrutura de dados aninhada funciona?

Alguém pode explicar por que meu programa não está mostrando o alerta correto?

Alguém pode me explicar por que o sub () / gsub () do awk funciona assim?