main.c 1 #include 2 3 int main() 4 ’ { 5 - printf("%i %i %c %1 %1 %С %1 %1 %С %1 %1 6 s / it-юмор :: geek (Прикольные гаджеты. Научный, инженерный и айтишный юмор)

it-юмор geek 

main.c
1	#include <stdio.h>	
2		
3	int main()	
4 ’	{	
5 -	printf("%i %i %c	%1 %1 %С %1 %1 %С %1 %1
6	s'+'9'9	// 159
7		// 7
8	'9*- 2 ,	// всё ещё 7
9	'9*- 2 ,	// автохрен, 55
10 -	' 5'+ 2 ,	// 55 0 °а°) -1 — 1-1
11	' 5' + 2 ,	// а, не, норм, 7
12		// единичка
13	0 *'1',	// нолик
14


Подробнее
main.c 1 #include <stdio.h> 2 3 int main() 4 ’ { 5 - printf("%i %i %c %1 %1 %С %1 %1 %С %1 %1 6 s'+'9'9 // 159 7 // 7 8 '9*- 2 , // всё ещё 7 9 '9*- 2 , // автохрен, 55 10 - ' 5'+ 2 , // 55 0 °а°) -1 — 1-1 11 ' 5' + 2 , // а, не, норм, 7 12 // единичка 13 0 *'1', // нолик 14 ,0,*,1,J // ну слава богу, нолик 15 '1* * * 1', // 2401 щ(° щ) 16 // верни, мне. мой. нолик. 17 "Л\А'У )_/"*); 18 19 // да пошло оно всё, буду проституткой 20 21 return 0; 22 } 23 V / Я 159 7 7 55 55 7 1 О О 2401 2352 \ ('У ) / ...Program finished with exit code 0 Press ENTER to exit console.
it-юмор,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор
Еще на тему
Развернуть
Дак ссылки же повторяются! Переполнение?
Почему переполнение? Скрипт exit code 0 успех, функция делает принт и возвращает 0, ну и всё. дайте мне КЭПа
Cortan39 Cortan39 30.10.202215:03 ответить ссылка -0.5
Ваш КЭП на месте. Тут прикол в том, что printf в зависимости от спецификаторов формата одну и ту же информацию будет по разному печатать. Символ '9' в ASCII имеет 10-чное значение 57, а '2' - 50, и поэтому '9' - '2' = 7, а '9' - 2 = '7' или 55 в ASCII. И все остальные приколы на этом и основаны тут
Ну и соответственно формат вывода руками там и выбраны чтобы запутать (%i - integer, %c - char, %s - string)
Si1ver Si1ver 30.10.202215:25 ответить ссылка 5.8
пиздец. до рофла доебались.
Во-первых там просили кэпа.

Во-вторых, как завещали нам предки "факты > лулзы". А то ну что это за хурма такая, что каждый второй рофл это или самое стереотипное смещно потому что автор не в теме но делает вид что в теме, или самое стереотипное смещно потому что атор в теме но пытается продать это тем кто не в теме
Si1ver Si1ver 31.10.202215:56 ответить ссылка 0.3
может чтобы и запутать, но стринг там чисто чтобы развести ручками в потешном недоумении+)
Akahara Akahara 30.10.202216:46 ответить ссылка -0.9
А блэт, точно. Я подумал что %i, %c - это ссылки. Скриптовое болото отупляет.
Разбираться в типах данных? Да ну нахуй, "чукча не читатель".
Не перегружать операторы в языке со слабой типизацией? Да ну нахуй, пусть работает как получится
MIKEk8 MIKEk8 30.10.202215:16 ответить ссылка -5.3
Погляди мнимательнее, писатель специально %i и %с в принте расставил. Ну и это, си это уже язык со слабой типизацией?)
Si1ver Si1ver 30.10.202215:31 ответить ссылка 3.7
Хех. Если б тут были б чюваки из одной группы телеграма, где обсуждают дизайн языков программирования, то они б тут сейчас такой холивар бы устроили вокруг типизации в C языке.
"язык C имеет статическую слабую явную типизацию"
соус: https://habr.com/ru/post/161205/
villy villy 30.10.202216:36 ответить ссылка -0.9
Компилятор сделал все что мог, но программист оказался тупой проституткой.
zx48 zx48 30.10.202215:17 ответить ссылка 3.0
Хитрой прошмандовкой.
пусть javascript посмотрит, там можно без %i %c схожее получить)
fura fura 30.10.202215:41 ответить ссылка -0.9
Главный прикол js тут в том, что там все эти трансформации не понятно какую вообще логику под собой имеют. В Си же всё элементарно, если помнить, что '9' == 0x39 == 57, тоесть с точки зрения языка это одно и тоже, что позволяет проводить с ними одинаковые операции )
а в js просто нужно понимать в каком порядке работает приведение типов
и всё
вот только понять это невозможно, если ты не гнвоерк
villy villy 30.10.202216:40 ответить ссылка -2.6
Всё элементарно, если помнить правила из стандарта языка.
Тип '9' - int, а не char - элементарно. int - signed int, а char - не обязательно signed char, может быть и unsigned char - элементарно. В printf char автоматически кастуется до int, а в scanf нельзя путать int* и char* - элементарно.
В JS плюс кастует операнды к String, кроме случая, когда оба операнда - числа, а минус - к Number, и это настолько же элементарно.
leosdren leosdren 31.10.202212:38 ответить ссылка -0.2
159 хитро подобрано. Я проверил, таких чисел всего 10: 150...159. Ни для каких других трех цифр это не работает. И ни для каких двух, или четырех и более цифр такое совпадение тоже никогда не случается.

Фактически взяли уникальное забавное совпадение, чтобы еще больше запутать читателя. В си есть проблемы из-за ручной работы с памятью, но самовольное, неинтуитивное и непонятное преобразование символов и чисел - этим си точно не страдает.
wataru wataru 30.10.202216:31 ответить ссылка 8.1
>этим си точно не страдает.
и тут стоило бы сказать: он этим наслаждается
Не, и не наслаждается.
С наслаждается поистину свободной арифметикой. Особенно адресной.
Ну и интерпретацией, да. Тут мы как раз видим пример, как можно интерпретировать одни и те же значения по-разному. И это ещё очень лайт. А вот когда начинается каст указателя одного типа на другой, вот там может начаться такая магия...
тут магия ожидает тех, кто плохо учился. и это касается не только программирования
всё равно лучше чем data type mismatch
diamid diamid 30.10.202216:56 ответить ссылка -1.4
Автохрен или авотхрен?
Хотя, один хрен ....
Semkin Semkin 30.10.202221:09 ответить ссылка 0.0
сиплюсплюсник в трэде! Меня никто не спрашивал, но смог устоять чтоб не расшифровать этот ребус:

Вся магия в том, какими числами кодируются символы цифр
'0' - 0x30 - 48
'1' - 0x31 - 49
'2' - 0x32 - 50
'3' - 0x33 - 51
'4' - 0x34 - 52
'5' - 0x35 - 53
'6' - 0x36 - 54
'7' - 0x37 - 55
'8' - 0x38 - 56
'9' - 0x39 - 57

И в том, что значат эти закорючки в printf
%i - интерпретировать байты как число(3, 14, 15)
%с - интерпретировать байты как символ('W', 'o', 'r', 'l', 'd')

И дальше этот фокусник просто жонглирует этими двумя, по сути, несложными инструментами:

1) число: '1' + '5' + '9'
Тут просто подобраны такие символы, коды которых случайно суммируются в "такое же число"
0x31 + 0x35 + 0x39 = 0x9f = 159

2) число: '9' - '2'
Коды символов цифр отличаются ровно на 0x30. Общая часть при вычитании просто сокращается
0x39 - 0x32 = 0x7 = 7

3) символ: '9' - 2
Тут не та же семерка, что в (2). В (2) было число, а сейчас символ
0x39 - 2 = 0x37 = '7'

4) число: '9' - 2
Выражение то же что и в (3), но в (3) данные интерпретировались как символ, а тут как число
0x39 - 2 = 0x37 = 55

5) число: '5' + 2
0x35 + 2 = 0x37 = 55

6) символ: '5' + 2
Выражение то же что и в (5), но в (5) данные интерпретировались как число, а тут как символ
0x35 + 2 = 0x37 = 55 = 'a'

7) число: 1 * 1
1 * 1 = 1

8) число: 0 * '1'
0 * 0x31 = 0

9) символ: '0' * '1'
Тут ноль получился неспроста. Если перемножить коды символов, то получится переполнение. Если не вдаваться в подробности, то можно думать об этом как будто из результирующего числа возьмутся только две последние цифры
0x30 * 0x31 = 0x930 -> 0x30 = '0'

10) число: '1' * '1'
0x31 * 0x31 = 0x961 = 2401

11) символ: '1' * '0'
Выражение почти то же что и в (9), но в (9) данные интерпретировались как символ, а тут как число
0x30 * 0x31 = 0x930 = 2352
JJack JJack 04.11.202215:27 ответить ссылка 0.6
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
//
h i .........................i...................i
0	0.2	0.4	0.6	0.8	1.
Q2 (GeV2) Console prices, adjusted for inflation
$796
1977- Atari 2600 Original price: $200
$935
1979- Intellivision Original price: $300
$410
1982- ColecoVision Original price: $175
$412
1986- Master System Original price: $200
$412	$346	$365	$1,125
1986- NES	1989- Genesis	1989- TurboGrafx 16 19
подробнее»

geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор ps консоли ps1 PS2 ps3 ps4 xbox xbox one песочница

Console prices, adjusted for inflation $796 1977- Atari 2600 Original price: $200 $935 1979- Intellivision Original price: $300 $410 1982- ColecoVision Original price: $175 $412 1986- Master System Original price: $200 $412 $346 $365 $1,125 1986- NES 1989- Genesis 1989- TurboGrafx 16 19