Pitanka

13 отговора 582 прегледа
#1

Pitanka

imame edna prosta programka za pobitovi operacii.kato ia startirame poluchavame desetichnata stoinostt na saotvetnoto dvoichno chislo.
mnogo mi e interesno zashto ako na red 10 smenim formatnata specifikacia sas
%s vmesto %d poluchavam kato resultat niza "C++ - Copyright 1991 Borland Intl."?


#include <stdio.h>
main()
{
int a,b,c,d;
a=1;
b=2;
c=5;
d=10;
#line 10
printf("%d\n",(a|b)<<2);
printf("%d\n",(a|b)^b);
printf("%d",c&d);
return 0;
}

Отговор
в отговор на luke #2

Re: Pitanka

Data сегмента започва с точно този стринг. Тъй като printf очаква указател към char той интерпретира точно по - този начин числото, което му подавате, а както забелязвате това са сравнително малки числа, т.е. адресират началото на сегмента -> и се отпечатва това.... пробвайте с 0 за да видите какво ще стане

Отговор
в отговор на darklord #3

Re: Pitanka

10x

Отговор
в отговор на luke #4

Re: Pitanka

mi az go compilirah s TC i nisho ne printi s opciq %s

Отговор
в отговор на no_future #5

малка идея

Пробвай да го компилираш със друг модел на паметта (small например). М/у другото и при мен не се получи, но не мога да пробвам с друг модел на паметта, защото имам libs само за large модела.

Отговор
в отговор на darklord #6

Re: малка идея

mdaaaa prav si, sys small izpisva - Copyright (c) 1988 Borland Intl.
s tiny mi kazva che nqmam stack, samo che kogato pechatam %c mi dava drug simvol a ne tireto bah li mamamu sho



Отговор
в отговор на no_future #7

Re: малка идея

В тази задача имаме проблем близък до проблема с NULL указател - указател, сочещ началото на паметта. В дадения случай се адресират наколко клетки след началото на паметта.

В small модел началото на паметта се счита началото на DATA-сегмента, където от 4-та позиция почва споменатия стринг. Затова се получава.
В large и huge модели началото на паметта е от физически адрес 0 - където е таблицата с прекъсванията, затова тогава не става.
В tini модел кода и ДАТА-сегмента са обединени, и началото на паметта се счита началото на кода. Споменатия стринг обаче е в ДАТА сегмента, който е долепен след кода. И в този случай няма да се покаже стринга. :))

Отговор
в отговор на geri #8

Re: малка идея

lele geri ako naisina si jena sym mnogo wpechtlen :)
mnogo dobre kazano


Отговор
в отговор на w #9

малко встрани от темата

geri е женско име само в английско-говорящите страни, а в немско-говорящите е мъжко име.
Така че няма защо да се впечатляваш толкова :))(

Отговор
в отговор на geri #10

Re: малко встрани от темата

A v slavyanskite kakvo e? :-)

Отговор
в отговор на Potencialen emigrant #11

Re: малко встрани от темата

А в слявянските подобни съкращения идват от Запад и всеки си ги тълкува както е удобно. Още повече че може да не са прякори породени от малкото име, а от фамилията. Например на Герган как ще му викаш: Геро по нашенски или Гери по западно му :)))

Отговор
в отговор на geri #12

Re: малко встрани от темата

Gercho, razbira se :-)))

Отговор
в отговор на geri #14

Re: малка идея

ei,bravo.strashen(a) si.mersi.

Редактирано от luke на

Отговор