-
−3
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
double m_sqrt (double p){
double l = 1;
double m = 0;
for(m = (l + ( p / l ) ) / 2;
m != l ;
m = (l + ( p / l ) ) / 2){
l = m;
}
return m;
}
tyrin,
10 Мая 2018
-
0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
if (cond1)
{
do_shit1();
}
else if (cond2)
{
do_shit2();
}
else if (cond3)
{
do_shit3();
}
else if (cond4)
{
do_shit4();
}
Вот например есть такая вот типичная хуита, предположим что я знаю, что среди этих cond1 cond2 ... только один может быть true, остальные условия всегда будет ложными.
И в этой сраной цепочке из if - else if можно перемещать if блоки без изменения логики. НО в языке Си (да и в C++ я уверен тоже) нет способа сказать компилятору что-то вроде "только одно из условий true, так что ты, сраный компилятор, можешь переделывать эту хуиту, и даже убрать else, если процессор в таком случае (при if(cond1) {do_shit1();}; if(cond2) {do_shit2();}; ... ) будет эту ссанину быстрее обрабатывать".
Какие-нибудь языки программирования такую оптимизацию вообще умеют?
j123123,
03 Мая 2018
-
+1
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
#include <stdio.h>
int main()
{
for (int x; scanf("%d", &x);) {
#define x x += x
x & (x-1);
printf("%d\n", x);
}
return 0;
}
https://ideone.com/SxgTL0
-3 -28
-2 -20
-1 -12
0 -4
1 4
2 12
3 20
Ничо нипанятна...
yet_another_one_shit,
01 Мая 2018
-
+1
Написавший это утверждает, что меняется содержимое памяти, но как происходят эти мистические изменения он объяснить не может.
Ioann_Zid,
01 Мая 2018
-
−10
Кто знает, как динамически выделить память, заполнить её нужными инструкциями, и исполнить этот код, не испытав при этом анальной боли и не получить Segmentation Fault ?
yet_another_one_shit,
23 Апреля 2018
-
0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
// ...
int datastack [ 4096 ] ;
int *dp = datastack ;
int push ( int x ) {
return *dp++ = x ;
}
int pop() {
return *--dp ;
}
// ...
void execute() {
((void(*)())pop())() ;
}
// ...
Мама! Мама! Я покакал!
yet_another_one_shit,
20 Апреля 2018
-
0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
char *r_or_mem() {
if ( get_mod() == 3 )
return regs [ ( size << 3 ) | ( look & 7 ) ] ;
else {
static char buf [ 32 ] ;
char *s = buf ;
*s++ = '[' ;
if ( ! ( look & 4 ) ) {
*s++ = 'B' ;
*s++ = ( look & 2 ) ? 'P' : 'X' ;
*s++ = '+' ;
*s++ = ( look & 1 ) ? 'D' : 'S' ;
*s++ = 'I' ;
if ( mod ) *s++ = '+' ;
} else {
if ( ( look & 7 ) == 6 && ! mod ) mod = 2 ;
else {
if ( look & 2 ) {
*s++ = 'B' ;
*s++ = ( look & 1 ) ? 'X' : 'P' ;
} else {
*s++ = ( look & 1 ) ? 'D' : 'S' ;
*s++ = 'I' ;
}
if ( mod ) *s++ = '+' ;
}
}
if ( mod ) {
read_value ( s , mod == 2 ) ;
s = s + strlen ( s ) ;
}
*s++ = ']' ;
*s = 0 ;
return buf ;
}
}
void checkorder() {
if ( ! dest ) {
char *tmp = op1 ;
op1 = op2 ;
op2 = tmp ;
}
}
void rm ( char *s ) {
sprintf ( decoded , "%s\t" , s ) ;
decoded += strlen ( decoded ) ;
get_ds() ;
read() ;
op1 = get_reg() ;
op2 = r_or_mem() ;
checkorder() ;
sprintf ( decoded , "%s , %s" , op1 , op2 ) ;
}
Чассть моего дизассемблера для 16-анального x86, что читает операндыы.
yet_another_one_shit,
19 Апреля 2018
-
+5
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
#include <stdio.h>
struct struct2 {
struct struct1 a ;
} ;
struct struct1 {
struct struct2 a ;
int b ;
} ;
int main(){
struct struct1 a ;
scanf ( "%d" , &a.a.a.b ) ;
printf ( "%d" , a.b ) ;
return 0;
}
Все, кроме TCC для C4droid, отказались это компилировать, не пробовал только Visual Studio
yet_another_one_shit,
17 Апреля 2018
-
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
#include <stdio.h>
int main(void) {
int i = 0;
loop:
i > 10 || printf("%d\n", i++) && goto loop;
printf("end\n");
return 0;
}
Зачем удолили #24105?
3.14159265,
14 Апреля 2018
-
+1
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
#include <stdio.h>
#include <string.h>
#include <sodium.h>
#include <stdlib.h>
#include <unistd.h>
void reverse(char s[]);
void itoa(int n, char s[]);
int main()
{
if(sodium_init() < 0) {
printf("Паника! Библиотека не может быть инициализирована, небезопасно использовать.\n");
return 1;
}
#define STR_LEN 30
char str[STR_LEN];
for(unsigned long i = 0; i < STR_LEN; ++i) {
if(randombytes_uniform(2) == 0)
str[i] = 48;
else
str[i] = 49;
}
printf("%s\n", str);
while(1) {
for (unsigned long i = 0; i < strlen(str); i+=2)
{
if(str[i] == '0' && str[i+1] == '0' && str[i+2] == '0')
str[i+1] = '1';
else if(str[i] == '1' && str[i+1] == '0' && str[i+2] == '0')
str[i] = '0', str[i+2] = '1';
else if(str[i] == '1' && str[i+1] == '0' && str[i+2] == '0')
str[i+2] = '1', str[i] = '0';
else if(str[i] == '1' && str[i+1] == '1' && str[i+2] == '1')
str[i+1] = '0', str[i] = '0';
else if(str[i] == '0' && str[i+1] == '1' && str[i+2] == '1')
str[i] = '1';
else if(str[i] == '1' && str[i+1] == '0' && str[i+2] == '1')
str[i] = '0', str[i+1] = '1';
else if(str[i] == '0' && str[i+1] == '0' && str[i+2] == '1')
str[i] = '1', str[i+1] = '1', str[i+2] = '0';
else if(str[i] == '0' && str[i+1] == '1' && str[i+2] == '0')
str[i+2] = '1';
else if(str[i] == '1' && str[i+1] == '1' && str[i+2] == '1')
str[i] = '0', str[i+2] = '0';
else if(str[i] == '1' && str[i+1] == '1' && str[i+2] == '0')
str[i+1] = '0';
}
printf("%s\n", str);
sleep(1);
}
return 0;
}
10 простых правил и бесконечный вывод триллиардов иттерация которые никогда не кнчатся! ЭТО НОНСЕНС
fuckercoder,
11 Апреля 2018