nataraj: (Default)
[personal profile] nataraj
Nataraj: как получить максимальное значение signed long'а...
В смысле так чтобы 0 а потом 111111111111111111111 и так на все байты лонга?
Khedin: (-1 >> 1)
Khedin: не
Khedin: ((unsigned) -1 >> 1)
Khedin: а то ещё ненароком со знаком сдвинет
Nataraj: O_o Это как?

А вот оказывается как:

#include <stdio.h>

int main () {
printf ("%d\n", (-1 >> 1));
printf ("%d\n", ((unsigned)-1 >> 1));
};
$ cc test.c && ./a.out
-1
2147483647


PS спасибо [livejournal.com profile] lodin за наше познание мира...

Date: 2008-09-08 07:38 pm (UTC)
From: [identity profile] al-stal.livejournal.com
прикольно )

Date: 2008-09-08 08:02 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Неправильно. Даже ((unsigned long) ~0L >> 1) не верно. Правильно — LONG_MAX.

Хинт: не на всех платформах используется такое представление для отрицательных чисел и даже не везде используется двоичная система.

Date: 2008-09-08 08:25 pm (UTC)
From: [identity profile] slobin.livejournal.com
Двоичная всё-таки обязана, это в стандарте прямым текстом прописано. Но вот логика работы со знаком может быть любой, не обязательно дополнительный код. Поэтому метод и впрямь, строго говоря, не работает. Но на практике реально напороться и на заполнение нулями, и на распространение знака, а вот напороться на другое представление целых... Я один раз на такой машине работал, но там не было C-компилятора. Там даже ассемблера не было, пока я его не написал. ;-)

... Или, скажем, сиденья, э-э-э... виноват, кресла Тоца-воителя ...

Date: 2008-09-09 06:07 am (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
IMHO для знаковых двоичная не обязательна. Но не поручусь.

Date: 2008-09-08 08:06 pm (UTC)
From: [identity profile] slobin.livejournal.com
В стандарте C сдвиг вправо signed не определён: имеет право и размножить знак, и заполнить нулями. RTFM :-)

... Не рой другому яму сам! ...

Date: 2008-09-09 08:25 am (UTC)
lodin: A bearded hacker in a hat (Default)
From: [personal profile] lodin
Гы, хочешь узнать много нового, дай совет линуксоиду... Ужас.

Profile

nataraj: (Default)
Swami Dhyan Nataraj

July 2024

S M T W T F S
 123456
789 10111213
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 21st, 2026 04:58 pm
Powered by Dreamwidth Studios