- 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
#include <conio.h>
#include <stdio.h>
const int SIZE = 33;
void DecToBin (unsigned int num, char *bin)
{
int i,j;
char tmp[SIZE];
for(i=0; num; num>>=1, i++)
tmp[i] = (num&1)?('1'):('0');
for(j=0; j<i; j++)
bin[j] = tmp[i-j-1];
bin[j]='\0';
}
unsigned int shl(unsigned int num, int shift)
{
return (num << shift) | (num >> 32 - shift);
}
void main()
{
int n, m;
scanf("%d", &n);
char bin[SIZE];
DecToBin(n,bin);
printf("%s\n", bin);
m = shl(n, 35);
DecToBin(m,bin);
printf("%s\n", bin);
_getch();
}
Еще одна очередная лаба, но уже код преподавателя, который он дал в качестве примера. Сказал что код на C++ (к вопросу, где здесь с++), и что нам нужно переписать его на "яве".
absolut 18.10.2012 07:17 # +2
bormand 18.10.2012 08:05 # 0
defecate-plusplus 18.10.2012 09:19 # +3
это законно и в с++, если implementation это позволяет (например, вижуал студия)
г++ это не позволяет (имеет право), поэтому и ругается
absolut 18.10.2012 09:52 # 0
bormand 18.10.2012 08:08 # +1
rol
defecate-plusplus 18.10.2012 09:58 # +3
http://ideone.com/1fGuw
wvxvw 18.10.2012 14:12 # 0
Что оказалось. С стандартные библиотеки - не предоставляют, зато можно в восьмеричном. Распечатать число за произвольным основанием нельзя (printf). Штатные инстументы С++ (cout) - тоже можно, как и в С, за основанием 10, 16, и 8, ни бинарного, ни произвольного нет. Буст (format) - тоже надо писать самому. Но зато есть в Qt QString.
defecate-plusplus 18.10.2012 14:32 # 0
char * itoa(int value, char * str, int base);
ну а касательно плюсов - для хелловорлда можно и std::bitset приладить для этого (см мой коммент выше) :)
anonimb84a2f6fd141 18.10.2012 14:33 # +3
какбы считается что программист может в уме справиться с квартетом бит
а октальную систему не хоронят ради традиций 197х и tar
wvxvw 18.10.2012 14:47 # 0
anonimb84a2f6fd141 18.10.2012 15:10 # +1
32 разрядное число займет четверть экрана, вот и прикиньте вероятность опечататься и/или пропустить опечатку в этой каше из ноликов и единичек
поэтому вопрос переведен в категорию профпригодности
wvxvw 18.10.2012 15:15 # 0
Ну а если серьезно, то мне в реальной жизни нужно было один раз написать сериализацию double, и нужно было распечатывать все биты в двоичном представлении, чтобы точно понять правильно я это делаю или нет. Так что аргумент абсолютно надуманый.
anonimb84a2f6fd141 18.10.2012 16:11 # +1
для одного случая в жизни можно соединить вместе два колеса, руль и педаль, тем более для отладки
absolut 18.10.2012 16:47 # +4
anonimb84a2f6fd141 19.10.2012 11:14 # 0
bormand 19.10.2012 11:22 # +2
bormand 18.10.2012 16:32 # +1
Поэтому из-за одного-двух раз в жизни включать вывод в двоичной системе в стандартные библиотеки имхо глупо. Кому надо - за 5 минут навелосипедит себе реализацию. Так что аргумент абсолютно надуманый.
wvxvw 18.10.2012 16:48 # 0
roman-kashitsyn 18.10.2012 15:56 # +3
Подскажите-ка нам, как нам в CL получить аргументы командной строки
bormand 18.10.2012 16:10 # 0
wvxvw 18.10.2012 16:32 # +2
Лисп - пример осымсленного подхода к проблеме. Во многих языках подход такой же. Если нужно распечатать число за произвольным основанием, есть какая-нибудь штатная функция для этого. А в С с какого-то перепуга есть вместо сделать одну универсальную функцию, сделали 3 не-универсальные. В итоге, как практика показала, одна из них вообще практически никогда не нужна.
wvxvw 18.10.2012 16:37 # 0
roman-kashitsyn 18.10.2012 16:46 # +2
Недостаток языковых средств взаимодействия с окружением просто так восполнить нельзя.
> В Лиспе еще много чего нет
Зато там много чего совершенно ненужного.
Самый богатый и удобный язык в плане стандартной библиотеки, с моей точки зрения, - python. На сишку же грешить смысла нет - она никогда не претендовала на роль удобного в использовании языка с богатой библиотекой, и она прекрасна в своей наготе.
wvxvw 18.10.2012 16:48 # 0
Бусты всякие не претендовали на роль языка с богатой билбиотекой? Та че, правда чтоле?
bormand 18.10.2012 17:14 # 0
wvxvw 18.10.2012 17:16 # 0
bormand 18.10.2012 17:20 # 0
http://ideone.com/7wCkF
wvxvw 18.10.2012 17:24 # 0
absolut 18.10.2012 17:42 # +2
3.14159265 18.10.2012 18:55 # +1
absolut 19.10.2012 07:13 # 0
bormand 18.10.2012 17:44 # +1
Поэтому это не печать, а что-то другое.
absolut 19.10.2012 07:16 # 0
defecate-plusplus 18.10.2012 17:23 # 0
http://liveworkspace.org/code/be68efe5509626b3a34806e2a896b46c
да и про вот такой штатный способ (еще раз):
roman-kashitsyn 18.10.2012 16:50 # 0
Видимо, я пользуюсь крайне нетрадиционным подходом...
wvxvw 18.10.2012 16:52 # 0
roman-kashitsyn 18.10.2012 16:53 # 0
wvxvw 18.10.2012 16:57 # 0
roman-kashitsyn 18.10.2012 17:00 # 0
Почему на python, к примеру, очень даже имеет смысл, а на Lisp нет?
wvxvw 18.10.2012 17:04 # 0
Питон и так написан на Си, и поэтому общается с системой на "понятном" ей языке. Т.е. это по-сути Си программа-интерпретатор, котрая выполняет Си-же код.
Ну и, понятное дело, что речь идет о реализациях, не предназначенных для встраивания в другие окружение. Для последних сама по себе идея аргументов командной строки не имеет смысла.
roman-kashitsyn 18.10.2012 17:09 # +3
Юниксовая архитектура каналов и фильтров достаточно гибка, чтобы объединять программы, написанные на любых языках, способных к вводу/выводу.
wvxvw 18.10.2012 17:16 # 0
Юниксовая система предполагает, что все что в ней используется использует Сишные конвеции вызовов функций. Я не понял в чем тут гибкость проявляется. Любой другой язык / среда, которые будут рабоать с системой должны делать это посредством Сишных АПИ, ну или повторить их в точности... других вариантов нет.
bormand 18.10.2012 17:28 # +1
wvxvw 18.10.2012 17:30 # 0
Что касается выполнения кода - то, например, у SBCL - свой формат исполняемых файлов с машинным кодом, не похожий вообще на ELF, и если специально системные вызовы не используются (т.е. нет вызовов через foregin function interface), то и соответственно, нет никаких обращений к Си рантайму.
bormand 18.10.2012 17:34 # 0
Ну собственно логично. Вещь в себе. И если к системе, использующей сишные апи, лисп прикрутить можно, и он даже работает, и отлично пользуется средствами системы, то к лисп машине нельзя прикрутить ни одного другого языка. Вообще. Разве что DSL на лиспе, или интерпретируемые им же скрипты.
wvxvw 18.10.2012 17:36 # 0
bormand 18.10.2012 17:52 # 0
wvxvw 18.10.2012 17:59 # 0
bormand 18.10.2012 18:10 # 0
roman-kashitsyn 18.10.2012 17:35 # +1
А мои жабо-программы хранятся в .class-файлах, упакованных в .jar архивы, но это никак не мешает мне передавать им аргументы командной строки или использовать их в пайпах
wvxvw 18.10.2012 17:37 # 0
roman-kashitsyn 18.10.2012 17:38 # 0
bormand 18.10.2012 17:43 # 0
Его рантайм является. Он кстати написан на си, и довольно маленький. А вот сам интерпретатор лиспа и прочее хранятся в снапшоте, который подгружается этим рантаймом.
bormand 18.10.2012 17:38 # 0
Ага. Многометровый снепшот оперативки. К которому опционально подклеен рантайм. (Писали тетрис на CL в SBCL, знаем).
anonimb84a2f6fd141 19.10.2012 11:22 # +2
Аль совсем башкой залип?..
Где бы что ни говорили --
Все одно сведет на Лисп!
roman-kashitsyn 18.10.2012 17:41 # 0
ошибочка вышла: не напрямую с ядром, а напрямую с устройствами, заставляя пикселы на вашем мониторе светиться без участия ядра
bormand 18.10.2012 17:45 # 0
roman-kashitsyn 18.10.2012 17:31 # 0
Юниксовая система предполагает, что в конечном счёте вызываются функции ядра для записи в файл и чтения из файла, и ничего более. Язык реализации и принятые в нём конвенции вызовов не имеют никакого значения.
bormand 18.10.2012 17:46 # 0
Функции открытия и закрытия файлов смотрят на вас с недоумением.
roman-kashitsyn 18.10.2012 20:12 # 0
bormand 19.10.2012 05:53 # 0
Хм. Ну одними stdin'ами и stdout'ами сыт не будешь... А как же работать с устройствами, с прочими файлами?
roman-kashitsyn 19.10.2012 11:29 # 0