Русский / Russian English / Английский

Сейчас на форуме: Wiz_41 (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Вопросы новичков —› Невозможно вывести 8-ричное число в языке программирования Си при помощи printf
Посл.ответ Сообщение

Ранг: -7.3 (нарушитель)
Статус: Участник

Создано: 16 марта 2020 20:32 · Поправил: FOXHACKBOK New!
Цитата · Личное сообщение · #1

Господа, столкнулся с такой проблемой, от которой я сам в шоке, если честно.

Короче говоря, проблема вот в чем:

Создал переменную unsigned long long int oct = 1777777777777777777777; с длинным значение, ну дк вот, в калькуляторе в режиме "Программист" выбрав систему счисления "OCT" - число 1777777777777777777777 - это -1(FFFFFFFFFFFFFFFF)
Вывожу число при помощи функции printf("%llu",oct); и выводится не то число, которое нужно. Выводится 6890346701660822641 , а должно быть -1.

Я знаю, что данное число 64 битное, так что не пишите мне что я этого не знал.

#include <stdio.h>

void main(){
unsigned long long int oct = 1777777777777777777777;

printf("%llu",oct);

return;
}

Компилировал в Code::Blocks!

Так что, вот такая я вот проблема.


Ранг: 756.3 (! !)
Статус: Участник
Student

Создано: 16 марта 2020 20:36 New!
Цитата · Личное сообщение · #2

А то, что ты хочешь -1 запихнуть в беззнаковую переменную и увидеть -1 тебя не смущает?

Ранг: -7.3 (нарушитель)
Статус: Участник

Создано: 16 марта 2020 20:38 New!
Цитата · Личное сообщение · #3

Это в калькуляторе, а не на выводе в printf!!!!

Добавлено спустя 3 минуты
Если вывести длинное число FFFFFFFFFFFFFFFF то printf выведет число -1


Ранг: 256.3 (наставник)
Статус: Участник

Создано: 16 марта 2020 20:49 New!
Цитата · Личное сообщение · #4

Ты наверное еще сильней удивившься узнав, что в 8-ричной системе число может быть представлено пользователю, но в переменной лежит просто число. Функция printf() в соответствии с маской "%llu" тебе его выводит.


Ранг: 288.8 (наставник)
Статус: Участник
Advisor

Создано: 16 марта 2020 20:49 · Поправил: Bronco New!
Цитата · Личное сообщение · #5

FOXHACKBOK пишет:
printf("%llu",oct)

а если так вывести -
printf("0x%llx", test/*uint64_t*/));
сорян, не весь пост увидел.

Ранг: -7.3 (нарушитель)
Статус: Участник

Создано: 16 марта 2020 20:53 New!
Цитата · Личное сообщение · #6

f13nd пишет:
Ты наверное еще сильней удивившься узнав, что в 8-ричной системе число может быть представлено пользователю, но в переменной лежит просто число. Функция printf() в соответствии с маской "%llu" тебе его выводит.


В любом случае должно быть значение -1, потому как число 1777777777777777777777 находится в диапазоне 64 битах, так что все равно должно вывестись -1, а не то что ты сказал.

Добавлено спустя 5 минут
Bronco пишет:
а если так вывести -
printf("0x%llx", test/*uint64_t*/));
сорян, не весь пост увидел.


unsigned long long int - это и есть 64 битное значение (8 байт)


Ранг: 256.3 (наставник)
Статус: Участник

Создано: 16 марта 2020 21:03 New!
Цитата · Личное сообщение · #7

FOXHACKBOK пишет:
должно вывестись -1

FOXHACKBOK пишет:
unsigned long long int

Термин unsigned тебе о чем-то говорит?

Ранг: -7.3 (нарушитель)
Статус: Участник

Создано: 16 марта 2020 21:05 New!
Цитата · Личное сообщение · #8

f13nd пишет:
Термин unsigned тебе о чем-то говорит?


unsigned - это безнаковое целое.

Ты понимаешь, что не в переменной -1 один должно быть, а в printf на выводе.

Ранг: -7.3 (нарушитель)
Статус: Участник

Создано: 16 марта 2020 21:07 New!
Цитата · Личное сообщение · #9

Ради эксперимента создай переменную unsigned long long int d = 0xFFFFFFFFFFFFFFFF; и ты на выводе получишь в printf-e - -1

Добавлено спустя 2 минуты
sdk4 пишет:
f13nd Откуда вы так хорошо знаете радиодело и программирование?


Братан, ты не по теме пишешь!

Ранг: 37.2 (посетитель)
Статус: Участник

Создано: 16 марта 2020 21:09 New!
Цитата · Личное сообщение · #10

А если написать
unsigned long long int oct = 01777777777777777777777;
?

| Сообщение посчитали полезным: FOXHACKBOK


Ранг: -7.3 (нарушитель)
Статус: Участник

Создано: 16 марта 2020 21:10 New!
Цитата · Личное сообщение · #11

Я сам, кстати, радио занимался, программировал AVR контроллеры на ассемблере и Си

Добавлено спустя 2 минуты
user99 пишет:
А если написать
unsigned long long int oct = 01777777777777777777777;


Ноль отсекается, если он не в конце значения стоит, так что нет, это не имеет значение.


Ранг: 256.3 (наставник)
Статус: Участник

Создано: 16 марта 2020 21:13 New!
Цитата · Личное сообщение · #12

FOXHACKBOK пишет:
Ты понимаешь, что не в переменной

Ну printf("%llu",) должно вывести 18446744073709551615, минус единицу тебе калькулятор показывает, потому что он тупой. А почему даже это не выводит хз, посмотри отладчиком.

Ранг: 37.2 (посетитель)
Статус: Участник

Создано: 16 марта 2020 21:13 New!
Цитата · Личное сообщение · #13

FOXHACKBOK пишет:
это не имеет значение

И как тогда компилятор должен понять, что вы указывает восьмеричное число?

Ранг: -7.3 (нарушитель)
Статус: Участник

Создано: 16 марта 2020 21:15 · Поправил: FOXHACKBOK New!
Цитата · Личное сообщение · #14

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


Есть максимальный диапазон, и число 1777777777777777777777 находится на максимальном диапазоне, то есть максимальное 64 битное значение

Добавлено спустя 3 минуты
Это все равно что написать бинарное максимальное число 1111111111111111111111111111111111111111111111111111111111111111 и выведется -1

Ранг: 37.2 (посетитель)
Статус: Участник

Создано: 16 марта 2020 21:19 New!
Цитата · Личное сообщение · #15

Так вы пробовали ноль подставить? Или это очередной толстый троллинг, чтобы форум не скучал?

Ранг: -7.3 (нарушитель)
Статус: Участник

Создано: 16 марта 2020 21:20 · Поправил: FOXHACKBOK New!
Цитата · Личное сообщение · #16

user99 пишет:
Так вы пробовали ноль подставить? Или это очередной толстый троллинг, чтобы форум не скучал?


Даже ставить не буду, потому как ноль отсекается на выводе. По опыту знаю.

Ранг: 8.0 (гость)
Статус: Участник

Создано: 16 марта 2020 21:22 New!
Цитата · Личное сообщение · #17

FOXHACKBOK, откройте букварь по Си и почитайте и про задание числовых констант, и про формат printf

Зачем вообще тупыми вопросами засорять форум?

Ранг: 37.2 (посетитель)
Статус: Участник

Создано: 16 марта 2020 21:22 New!
Цитата · Личное сообщение · #18

FOXHACKBOK пишет:
Даже ставить не буду, потому как ноль отсекается на выводе. По опыту знаю

Диагноз: либо тролль, либо клиника и не лечится

| Сообщение посчитали полезным: Orlyonok


Ранг: -7.3 (нарушитель)
Статус: Участник

Создано: 16 марта 2020 21:25 · Поправил: FOXHACKBOK New!
Цитата · Личное сообщение · #19

Orlyonok пишет:
FOXHACKBOK, откройте букварь по Си и почитайте и про задание числовых констант, и про формат printf

Зачем вообще тупыми вопросами засорять форум?


Ты ответь на вопрос, потом будешь про тролинги говорить, не надо сваливать свои не знания на тролинги, Братан

Добавлено спустя 1 минуту
user99 пишет:
Диагноз: либо тролль, либо клиника и не лечится


Запусти компилятор, включи мозг, и ответь на данную задачу, и не надо срать тему своими школьными комментами

Добавлено спустя 3 минуты
Orlyonok пишет:
FOXHACKBOK, откройте букварь по Си и почитайте и про задание числовых констант, и про формат printf

Зачем вообще тупыми вопросами засорять форум?


Это не тупой вопрос, раз ты ответить не можешь, логично?

Добавлено спустя 13 минут
Короче, я прогнал через отладчик, да, и число 1777777777777777777777 не помещается в 8-байтовый размер, потому как число выводится 77777777777777771

77777777 - 4 байта
77777777 - 4 байта
1 - вне диапазона

Ранг: 142.8 (ветеран)
Статус: Участник

Создано: 16 марта 2020 22:12 New!
Цитата · Личное сообщение · #20

FOXHACKBOK
а с какого форума ты пришел что у вас там принято так набивать посты?) пока получается прямо наоборот.
заодно, ты отдаешь себе отчет в том, что уже выглядишь как конченный даун с этой темой?)

Ранг: -7.3 (нарушитель)
Статус: Участник

Создано: 16 марта 2020 22:15 · Поправил: FOXHACKBOK New!
Цитата · Личное сообщение · #21

Alchemistry пишет:
а с какого форума ты пришел что у вас там принято так набивать посты?) пока получается прямо наоборот.
заодно, ты отдаешь себе отчет в том, что уже выглядишь как конченный даун с этой темой?)


К, сожалению, ты д*ун, потому как решить это не можешь

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

Добавлено спустя 2 минуты
Чуть что, сразу тролинг, я в шоке с Вас, не со всех, но с некоторых.
Школьных терминов где-то набрались, и теперь болтают, когда решить не могут ничего.

Добавлено спустя 4 минуты
Я вот, серьезна, лайк поставлю тому, кто решит эту задачу, причем на каждом его посте.


Ранг: 522.4 (!)
Статус: Участник
Победитель турнира 2010

Создано: 16 марта 2020 22:38 New!
Цитата · Личное сообщение · #22

Не знаю все ли правильно прочитал, но

https://ideone.com/Oz80U0

#include <stdio.h>

int main(void) {
long long int oct = 01777777777777777777777;
printf("%lld\n", oct);
return 0;
}

выводит ожидаемый -1

| Сообщение посчитали полезным: FOXHACKBOK


Ранг: -7.3 (нарушитель)
Статус: Участник

Создано: 16 марта 2020 22:40 · Поправил: FOXHACKBOK New!
Цитата · Личное сообщение · #23

OKOB пишет:
Не знаю все ли правильно прочитал, но

https://ideone.com/Oz80U0

#include <stdio.h>

int main(void) {
long long int oct = 01777777777777777777777;
printf("%lld\n", oct);
return 0;
}

выводит ожидаемый -1


Выводися не -1 , а другое число

Скомпилируй в Code::Blocks!!!

Добавлено спустя 17 минут
Да, все, точно, надо 0 было добавить, так что, все верно, спасибо!

Добавлено спустя 18 минут
Щас лайки поставлю тому, кто первый написал это.

Добавлено спустя 20 минут
Странно вообще, обычно 0 отсекается от значения, странно, странно

Ранг: 412.3 (мудрец)
Статус: Участник

Создано: 16 марта 2020 23:26 · Поправил: dosprog New!
Цитата · Личное сообщение · #24

FOXHACKBOK пишет:
Выводися не -1 , а другое число

Code:
  1. #include <stdio.h>
  2. int main(void) {
  3. __int64 oct = 01777777777777777777777;
  4. printf("oct = %lld\n", oct);
  5. return 0;
  6. }
Выводится:
Code:
  1. oct = -1

| Сообщение посчитали полезным: FOXHACKBOK



Ранг: 522.4 (!)
Статус: Участник
Победитель турнира 2010

Создано: 16 марта 2020 23:32 New!
Цитата · Личное сообщение · #25

не знаю что у вас за кодоблокс, только что поставил - ожидаемый результат


Ранг: 37.2 (посетитель)
Статус: Участник

Создано: 16 марта 2020 23:40 New!
Цитата · Личное сообщение · #26

Мдя
FOXHACKBOK пишет:
Даже ставить не буду ... По опыту знаю

FOXHACKBOK пишет:
Запусти компилятор, включи мозг

FOXHACKBOK пишет:
К, сожалению, ты д*ун


А потом внезапно
FOXHACKBOK пишет:
Да, все, точно, надо 0 было добавить


Вспомнилось:
Отец и сын-дебил стоят на берегу моря.
- Вот, сынок, это море.
- Где?
- Вот это, уходящее в небо, голубое пространство, все это море...
- Где?
- Видишь, волны играют, чайки снуют туда-сюда, блики от солнца, в дали белый пароходик, запах, непередаваемый запах!... Все это - море!
- Где?
Отец психует, хватает дебила-сына за загривок и несколько раз макает его башкой в воду:
- Вот море! Вот море! Вот море! Вот море! Вот море! Вот море!
- Ой, папа, что это было?!
- Море, сынок...
- Где?

| Сообщение посчитали полезным: Lambda, _MBK_, Orlyonok


Ранг: 44.3 (посетитель)
Статус: Участник

Создано: 17 марта 2020 07:16 New!
Цитата · Личное сообщение · #27

Приехал в аул доктор технических наук читать лекцию по кибернетике. После двух часов лекции он обратился к аксакалам - понятна ли им лекция и есть ли у них вопросы. Встал самый старый аксакал и говорит, что про кибернетика-мибернетика им все понятно. Но есть другой вопрос. - Ты, - говорит, - уважаемый, знаешь конфеты "подушечка"? Лектор: - Знаю! - Так вот скажи, как туда внутрь варенье попадает?


Ранг: 2011.3 (!!!!)
Статус: Модератор
retired

Создано: 17 марта 2020 08:23 New!
Цитата · Личное сообщение · #28

Последнего предупреждения было мало, видимо. Пора автору и отдохнуть.

| Сообщение посчитали полезным: user99

 eXeL@B —› Вопросы новичков —› Невозможно вывести 8-ричное число в языке программирования Си при помощи printf
Эта тема закрыта. Ответы больше не принимаются.

Видеокурс ВЗЛОМ