Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
1

Пояснить результат перевода чисел в различные сс

12.03.2011, 19:22. Показов 1354. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
объясните почему число из 16ой системы , преобразуется в десятичное при таком коде:
C
1
2
char a[4]={0E,65,03,2A};
int x=*((int*)&(a[0]));
изначально число 2A03650Eh переходит в десятичное
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2011, 19:22
Ответы с готовыми решениями:

Приложение для перевода чисел в различные системы счисления
прошу помощи в задании!: Разработать приложение, позволяющее выполнить перевод целого числа из...

Пояснить результат выполнения кода
uses crt; var k:integer; begin k:=20; k:=k+10; if k+10 = 30 then k:=8 else k:=k-1;

Пояснить результат работы цикла
почему один из циклов по i от 1 до 5 (размер массива 10). вот прога: var i,c: integer; a: array ...

Пояснить результат выполнения кода
Недавно начал программировать на С. Не могу понять, как так выходит, что процедура func1 и func2...

15
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
12.03.2011, 20:28 2
И какое у тебя выходит десятичное?
0
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
12.03.2011, 21:09  [ТС] 3
я неправильно написал , в ячейках массива находятся символы соответствующие кодам которые я написал
0
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
12.03.2011, 21:41 4
Тут похоже на то что ты переменной х присваиваешь адрес хранения первой переменной массива

Добавлено через 39 секунд
а по умолчанию вижуал работает с десятичными числами
0
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
12.03.2011, 22:28  [ТС] 5
Цитата Сообщение от Dimarik__ Посмотреть сообщение
Тут похоже на то что ты переменной х присваиваешь адрес хранения первой переменной массива

Добавлено через 39 секунд
а по умолчанию вижуал работает с десятичными числами
я вообще в линуксе это использовал
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
12.03.2011, 23:18 6
C
1
2
3
4
5
6
7
#include <stdio.h>
 
int main(void){
    char a[4]={0x0E,0x65,0x03,0x2A};
    printf("%x\n", *(int*)a);
    return 0;
}
0
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
13.03.2011, 00:27 7
эти числа в памяти идут так: 2A03650E , тоесть 4 байта (2А-первый, 03-2-й...), а тип int тоже занимает 4 байта. Поэтому переменная x берёт все вместе байты и преобразует в 10-ю систему.
0
Формучанин
364 / 294 / 42
Регистрация: 02.11.2010
Сообщений: 1,242
13.03.2011, 01:09 8
Потомучто человек живёт в 10 системе а комьютер в 16.
Когда ты составляешь массив из 4-х байт 0E 65 03 2A, то компьютер трактует его как
число 2A 03 65 0E (обратный порядок байтов)
int это десятичное представление, если перевести 2A03650E в 10-тичное то получим 704 865 550
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
13.03.2011, 01:55 9
Цитата Сообщение от dimon1984 Посмотреть сообщение
и преобразует в 10-ю систему.
Это вывод по умолчанию в десятичной системе. К тому же у ТС значения массива неправильно заданы. Я же работающий пример показал. Просто из любопытства скомпилируйте, запустите...
1
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
13.03.2011, 10:08  [ТС] 10
Цитата Сообщение от nxnx Посмотреть сообщение
Потомучто человек живёт в 10 системе а комьютер в 16.
Когда ты составляешь массив из 4-х байт 0E 65 03 2A, то компьютер трактует его как
число 2A 03 65 0E (обратный порядок байтов)
int это десятичное представление, если перевести 2A03650E в 10-тичное то получим 704 865 550
это прямой порядок

Добавлено через 4 минуты
Цитата Сообщение от easybudda Посмотреть сообщение
Это вывод по умолчанию в десятичной системе. К тому же у ТС значения массива неправильно заданы. Я же работающий пример показал. Просто из любопытства скомпилируйте, запустите...
а почему в выражении два указателя? какой из них на что указывает ?
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
13.03.2011, 10:26 11
Цитата Сообщение от suv121 Посмотреть сообщение
а почему в выражении два указателя? какой из них на что указывает ?
в каком выражении? "printf("%x\n", *(int*)a);"? Тут сначала указатель на char приводится к типу указателя на int: (int*) a, а потом с помощью операции разыменования передаем значение, на которое указывает указатель, в функцию printf
0
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
13.03.2011, 10:32 12
Из любопытства уже смотрел не раз, благодарю.
Потомучто человек живёт в 10 системе а комьютер в 16
компьютер в 2-й системе живёт, это человек для простоты переводит 2-ю в 16-ю .
два указателя
внутренние скобки это взятие адреса - (int*)&(a[0])
а внешние *((...)) - разыменовывается всё число (4 байта).
0
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
13.03.2011, 12:06  [ТС] 13
Цитата Сообщение от dimon1984 Посмотреть сообщение

внутренние скобки это взятие адреса - (int*)&(a[0])
а внешние *((...)) - разыменовывается всё число (4 байта).
а при разыменовании всегда выводит в 10ой системе?
0
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
13.03.2011, 12:11 14
int да, если не форматировать
C
1
cout<<(int)40<<' '<<(char)40<<endl;
>> 40 (
0
Формучанин
364 / 294 / 42
Регистрация: 02.11.2010
Сообщений: 1,242
13.03.2011, 12:30 15
Цитата Сообщение от suv121 Посмотреть сообщение
а при разыменовании всегда выводит в 10ой системе?
От того что число представить в 10-й системе, его значение в 2\16-ричной не изменится.

можно в printf засунуть %x и вывод будет в 16-ричной)
0
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
13.03.2011, 12:37  [ТС] 16
Цитата Сообщение от nxnx Посмотреть сообщение
От того что число представить в 10-й системе, его значение в 2\16-ричной не изменится.
ну это понятно дело
0
13.03.2011, 12:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2011, 12:37
Помогаю со студенческими работами здесь

Пояснить результат выполнения кода
Всем привет. Ребят, уже не первый раз сталкиваюсь с подобным, кто-нибудь может мне объяснить...

Пояснить результат работы кода
Результатом работы этой программы является:а==0.00, b==2.00 Как я понимаю, данный пример на...

Пояснить результат работы кода
Добрый вечер. кто нибудь может объяснить в чем здесь подвох? http://rextester.com/BKATS43592 ...

Не работает программа перевода в различные системы счисления
Добрый день, не получается программа. Заранее спасибо. Извиняюсь за такой ввод программы, я новичок...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru