Предупреждение: у нас есть цензура и предварительный отбор публикуемых материалов. Анекдоты здесь бывают... какие угодно. Если вам это не нравится, пожалуйста, покиньте сайт. 18+

Анекдот №-10059266

Идет Илья Муромец по полю. Видит - Змей Горыныч сидит. Ну, тот подкрался
к нему и срубил ему голову. У Змея Горыныча две выросло. Срубил Илья ему
две - четыре выросло! Срубил четыре - выросло восемь!!! И так далее... И
вот когда Илья Муромец срубил 65535 голов, Змей Горыныч помер... Потому
что был он 16-ти битным.
+315
Проголосовало за – 464, против – 149
Статистика голосований по странам
Чтобы оставить комментарии, необходимо авторизоваться. За оскорбления и спам - бан.
22 комментария, показывать
сначала новые

tlittle02.04.19 09:44

Эххх... 2001 год, вроде в интернетах ещё грамотные люди сидели... Чтобы 16-битный змей умер - у него надо срубить 32768 голов. А 65535 у него вообще быть не может - это же змей :)

+0
ответить

zavbaz➦tlittle28.04.24 11:43

эээх 2019 год. А люди какие были такие и остались!
Диапазон целочисленных значений , которые могут храниться в 16 битах, зависит от используемого целочисленного представления. Для двух наиболее распространенных представлений диапазон составляет
1 от 0 до 65 535 (2 в 16 степени минус 1) для представления в виде беззнакового двоичного числа.
2 от −32768 (-1 умножить 2 в 15 степени) до 32767 (2 в 15 степени МИНУС 1) при представлении отрицательных целых чисел.
Заметьте +32767 а не +32768! Видимо типичная ошибка ламера который забывает что считают с 0! А 0 рубить никак!

+0
ответить

tlittle➦zavbaz28.04.24 22:40

Совершенно верно. И ничего не изменилось. Если змей -unsigned, то голов 32768, а затем он умирает. Если змей знаковый, то голов 16384, затем смерть. А 65535 голов быть у 16-битного змея быть не может.

+0
ответить

zavbaz➦tlittle28.04.24 23:09

(Большинство) реализаций C++ (и не только C) предоставляют по крайней мере 8, 16, 32 и 64-битные знаковые и беззнаковые целочисленные типы. И как раз В случае беззнаковыми целочисленными 65535 в 16 бит прекрасно укладываются.
Использование беззнаковых целочисленных типов в C++ — дело, мягко говоря, спорное. «За» такой подход возможность выразить в системе типов тот факт, что некоторая сущность не может быть отрицательной. Аргументом «против» является тот факт, что вычитание легко приводит к возникновению больших значений из-за целочисленного переполнения при нуле.

+0
ответить

tlittle➦zavbaz29.04.24 19:50

Оно замечательно укладываеся. Расскажите мне, как вы добились 65535 голов?

+0
ответить

zavbaz➦tlittle29.04.24 20:20

даже уже не знаю как ткнуть пальцем https://ru.stackoverflow.com/questions/1152230/%D0%9D%D0%B5-%D0%BF%D0%BE%D0%BD%D0%B8%D0%BC%D0%B0%D1%8E-%D1%80%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D1%83-%D0%BC%D0%B5%D0%B6%D0%B4%D1%83-signed-unsigned

unsigned int a = 65535
Число 65 535 в двоичной системе счисления представлено как 1111 1111 1111 1111. 65 535 — это наибольшее число, которое может хранить 2-байтовая (16 бит) целочисленная переменная без знака, так как это число использует все 16 бит.

+0
ответить

zavbaz➦tlittle29.04.24 20:55

ну или так если русским буковкам не доверяете https://eel.is/c++draft/basic.fundamental#2

+0
ответить

tlittle➦zavbaz30.04.24 21:03

Это замечательно. Сначала у змея была одна голова. Срубил ему Илюшенька эту голову и стало их две. Срубил две - выросло четыре. Как вы добились числа 65535?

+0
ответить

zavbaz➦tlittle30.04.24 22:09

ну детский сад же
Переполнение беззнакового целого числа четко определено стандартами C и C++. Например, стандарт C99
Вычисление, включающее беззнаковые операнды, никогда не может привести к переполнению, поскольку результат, который не может быть представлен результирующим целочисленным типом без знака, уменьшается по модулю числа, которое на единицу больше, чем наибольшее значение, которое может быть представлено результирующим типом.
Поэтому максимальное значение 16-bit unsigned int 65535
если unsigned int16 переменной присвоить значени 32768 и умножить на 2 по вы получите оппа 65535 а вовсе 65536

+0
ответить

zavbaz➦zavbaz30.04.24 22:09

а вовсе не 65536

+0
ответить

tlittle➦zavbaz30.04.24 22:51

Чего? Ты приболел что-ли? А если мы умножим 65535 на два, то что мы получим? Тебе бы начать даже не с азов программирования, с русского языка, попытаться понять, что тебе пишут в документации. А то ты умных слов где-то начитался, а элементарно проверить результат не способен. "результат, который не может быть представлен результирующим целочисленным типом без знака, уменьшается по модулю числа, которое на единицу больше, чем наибольшее значение, которое может быть представлено результирующим типом". Т.е., для 16-битного unsgined int максимальное число - 65535, на единицу больше - 65536, уменьшаем по модулю и получаем. Па-па-ра-рам... "0"...

#include <iostream>
int main()
{
unsigned short i = 32768;
i = i*2;
std::cout<<i;
return 0;
}

Ну ни хрена себе, неожиданный результат:

0

...Program finished with exit code 0
Press ENTER to exit console.

+0
ответить

zavbaz➦tlittle30.04.24 23:07

ляяяяяяяяяяяя про неявное преобразование типов ты явно не слышал
Вопрос в том какие типы данных получаются в результате преобразований в разных случаях:
char+int
char+float
char+double
int+float
int+double
char+unsigned char
!!!!!!!!!!!!!!!!! int+unsigned int !!!!!!!!!!!!!!!!!!!!!!
float+unsigned float
вот тут оно у тебя и происхот i = i*2;
:))) говорил же детский сад.

+0
ответить

zavbaz➦zavbaz30.04.24 23:10

Если один из операндов имеет тип long double, то и второй операнд приводится к типу long double
В противном случае, если один из операндов имеет тип double, то и второй операнд приводится к типу double
В противном случае, если один из операндов имеет тип float, то и второй операнд приводится к типу float
В противном случае оба операнда подвергаются integer promotions1 и далее рассматриваются типы после promotions

Если оба операнда имеют одинаковый тип, ничего делать не надо
В противном случае, если оба операнда имеют знаковый тип или оба операнда имеют беззнаковый тип, то операнд с меньшим рангом конвертируется к типу операнда с большим рангом
В противном случае, если один операнд имеет беззнаковый тип и ранг, который выше или равен рангу второго операнда, то знаковый операнд конвертируется к типу беззнакового операнда
В противном случае, если диапазон значений знакового операнда достаточен для представления всех значений беззнакового операнда, то беззнаковый операнд конвертируется к типу знакового операнда
В противном случае, оба операнда конвертируются к беззнаковому типу, соответствующему типу знакового операнда

Integer promotions - преобразования "малых" целых типов _Bool, [signed/unsigned] char, [signed/unsigned] short к типу int (если диапазон int достаточен)

+0
ответить

tlittle➦zavbaz30.04.24 23:15

"происхот". Я тебе, дурачку, программу написал, собрал и запустил, результат показал.
Тебе прямо пишут в документации, что "результат, который не может быть представлен результирующим целочисленным типом без знака, уменьшается по модулю числа, которое на единицу больше, чем наибольшее значение, которое может быть представлено результирующим типом" (твоя циатата). Тебе бы взять и просто посчитать. Умножаем 32768 на два. Получаем 65536. Для 16-битного числа это больше, чем максимально допустимое число 65535, поэтому мы уменьшаем его по модулю на 65536. И получаем 0. Или просто берем представленный выше текст программы и компилируем его, это очень просто.

+0
ответить

zavbaz➦tlittle30.04.24 23:16

А ты чел похож на человека который умеет пользоваться молотком (ну как умеет - иногда попадает по гвоздю если хорошо прицелится) но при этом пытается использовать молоток во всех случаях не задумываясь что может быть очень больно. И не задумывается из чего сделан молоток какие собственно силы участвуют в работе и тд.

+0
ответить

tlittle➦zavbaz30.04.24 23:34

Ты мне скажи, дурачок, как ты получил 65535 голов у 16-битного змея?

+0
ответить

zavbaz➦tlittle30.04.24 23:41

"собрал и запустил" угу в онлайн компиляторе он собрал :) без привязке к платформе (ЗМЕЙ)
а чтобы оно вообще правильно работало должно то быть не так как у тебя О ЧЁМ СОБСТВЕННО и шутка
а так
{
unsigned z = 0;
unsigned short i = 32768;
z = i*2;
std::cout<<z;
return 0;
};

и резуьтат будет честные 65536

+0
ответить

zavbaz➦tlittle30.04.24 23:55

{
unsigned short x = 65535; // наибольшее значение, которое может хранить 16-битная unsigned переменная
std::cout << "x was: " << x << std::endl;
x = x + 1; // 65536 - это число больше максимально допустимого числа из диапазона допустимых значений. Следовательно, произойдёт переполнение, так как переменнная x не может хранить 17 бит
std::cout << "x is now: " << x << std::endl; 0;
}
x was: 65535
x is now: 0
на что вы и упираете ЗАБЫВ о том что результат то вы получили неправильный с точки зрения змея а правильный с точки зрения компилятора. Вот в этом то и весь юмор.

+0
ответить

tlittle➦zavbaz01.05.24 00:02

Точно? 65536? Не 65535? Ты уверен? Пизадабол до тебя говорил, что будет 65535... Наверное, спиздел, как обычно... Ну а теперь ты попробуй переключиться на 16-битные величины, может и у тебя получится не выдавать значение 65536...

+0
ответить

tlittle➦zavbaz01.05.24 00:04

Мммм... Давай ты пойдешь дальше заведовать базой. Тебе уже пять раз объяснили, но ты все еще пытаешься заменить операцию умножения операцией сложения. Зачем? Ты тупой?

+0
ответить

zavbaz➦tlittle01.05.24 00:38

а чем собственно сложение от умножения отличается если результат одинаковый - переполнение.
Я тебе не меньше раз объяснял но ты всё ещё упираешся рогом твоей право.
stackoverflow.com/questions/75325356/what-is-the-algorithm-that-a-compiler-would-use-while-casting-signed-variables-t

я
Поэтому максимальное значение 16-bit unsigned int 65535
если unsigned int16 переменной присвоить значени 32768 и умножить на 2 по вы получите оппа 65535
вы
Т.е., для 16-битного unsgined int максимальное число - 65535, на единицу больше - 65536, уменьшаем по модулю и получаем. Па-па-ра-рам... "0"...

только вот по "моей" логике ошибка составляет 1
а вот по "вашей" (комплилятора) ошибка составляет 65536
С 0 головами дракон дохнет.

И кто тут кретин?
И в 33 раз говорю учитесь писать так чтобы переполнения не было. О ЧЁМ И АНЕКДОТ.

Про "заведовать базой" - переход на личности это конечно великого ума поступок. При этом не зная откуда вообще взялся ник. Если что ни к военным ни к овощным ни к каким-либо прочим существующем в реальном мире базам ник не имеет отношения :)
А вот к base() имеет
:)

+0
ответить

tlittle➦zavbaz01.05.24 11:16

Нет, ну кретин же. Уже и сам на документацию сослался, еще и логику какую-то придумал. В анекдоте количество голов удваивается с каждым отрубанием. И при последнем отрубании происходит переполнение, после чего дракон дохнет. Только вот нельзя "отрубанием" (удвоением) получить число 65535. Ни в сигнед, ни в ансигнед.

+0
ответить

Общий рейтинг комментаторов
Рейтинг стоп-листов

Рейтинг@Mail.ru