Maior Inteiro - Linguagem C

Olá pessoal

quero pegar o maior inteiro representado em uma máquina utilizando somente operadores binários.

pra isso,
escrevi o seguinte código:

[code]

int max = 0; // 00…00000;
max = ~max; // 11…1111;
max = max>>1; //era pra ser 01…1111;[/code]

entretanto, o valor final de max é 1111…11111 que é o menor inteiro…
obtido pelo inverso do valor 0…
ou seja, a operação max>>1 não está funcionando como eu queria…
alguém sabe qual é o problema?

Lembrando que a representação da máquina é complemento para 2.

No C tem os tipos unsigned. Então o maior inteiro seria:

unsigned int max = 0; max = ~max;

No caso de um signed integer, creio que seja só fazer shift do resultado acima, antes de converte-lo para int.

Vini,
um número unsigned representa (2^n)-1 números positivos… onde n é o número de bits…
um número int representa (2^n-1)-1 números positivos, então… não é a mesma coisa…
entretanto eu descobri o problema aqui…

o operador de deslocamento a direita utiliza o deslocamento aritmético…
isso significa que ele conserva o número mais a esquerda…
ex:

1001 >> 2 é igual a 1110…

quando que o deslocamento lógico seria: 0010

eu usei um loop aqui pra descobrir qual a maior representação… (nao posso usar a função size of)
utilizei…

int num =1; while(num>0){ num<<1; } num = ~num;

Você falou em número inteiro, não no tipo int.
O unsigned é um número inteiro, sem sinal.

Você pode achar o maior número signed com base num unsigned:

unsigned x = ~0; //Maior unsigned int y = (x &gt;&gt; 1);

Agora, se você só pode usar o tipo int, aí não sei se tem jeito mais fácil do que o que você descreveu.

[quote=julianofischer]um número unsigned representa (2^n)-1 números positivos… onde n é o número de bits…
um número int representa (2^n-1)-1 números positivos, então… não é a mesma coisa…
[/quote]

Só uma correçãozinha na matemática, vc se enganou nos parênteses:

um número unsigned representa 2^n-1 números positivos.
um número int representa 2^(n-1)-1 números positivos

Cuidado com a precedência dos operadores.