Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
AndreWwWwwW
3 / 3 / 0
Регистрация: 15.09.2018
Сообщений: 77
1

Что такое 0x800000000000000UL?

04.11.2018, 06:00. Просмотров 212. Ответов 5
Метки нет (Все метки)

Что вообще значит запись вида:
0x800000000000000UL?
Это представление числа в какой-то системе счисления в языке C или что???
Объясните что это такое плиз. Очень надо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2018, 06:00
Ответы с готовыми решениями:

Кто сможет объяснить что означает в этом коде 0x55555, что это такое, для чего предназначено?
#include "stdafx.h" #pragma warning(disable : 4996) #include <stdio.h> #include <conio.h>...

Что такое ЯП C?
Подскажите пожалуйста что такое язык C. В Visual Studio его нету. И в интернете даже уроков про...

Что такое е
Double eps=10e-5. Что такое е и что выговодится на экран

Что такое флаги в Си?
Можете объяснить эту тему?

Что такое стек?
Нигде не нашёл понятного определения некого стека. Что такое стек, как с ним работать и т.д.?

5
ft4l
Невнимательный
252 / 215 / 91
Регистрация: 08.02.2013
Сообщений: 641
Записей в блоге: 1
04.11.2018, 09:37 2
это запись числа в 16-ричной системе счисления, об этом говорит 0x
UL это суффикс указывающий компилятору на тип этой числовой константы (беззнаковое целое)
// хотя здесь сама запись 0x800000000000000 даёт ему понять что число умещается только в long long
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main()
{
 
    long long unsigned int x = 0x800000000000000UL;
 
    printf("0x800000000000000UL is %llu unsigned decimal\n", x);
    printf("0x800000000000000UL is %#llo unsigned octal\n", x);
    printf("0x800000000000000UL is %#llx unsigned hexadecimal\n", x);
    return 0;
}
подробнее например тут https://prog-cpp.ru/c-constants/
0
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
4576 / 3290 / 3937
Регистрация: 05.06.2014
Сообщений: 16,448
04.11.2018, 09:48 3
Найдено в Сети
Забавно, но на самом деле вам не нужно добавлять какой-либо суффикс в свою шестую константу, чтобы он правильно обрабатывался. Раздел 6.4.4.1 стандарта C и раздел 2.14.3 стандарта С++ содержат следующую таблицу:
Suffix | Decimal Constant | Octal or Hexadecimal Constant
-------------+------------------------+------------------------------
none | int | int
| long int | unsigned int
| long long int | long int
| | unsigned long int
| | long long int
| | unsigned long long int
-------------+------------------------+------------------------------
u or U | unsigned int | unsigned int
| unsigned long int | unsigned long int
| unsigned long long int | unsigned long long int
-------------+------------------------+------------------------------
l or L | long int | long int
| long long int | unsigned long int
| | long long int
| | unsigned long long int
-------------+------------------------+------------------------------
Both u or U | unsigned long int | unsigned long int
and l or L | unsigned long long int | unsigned long long int
-------------+------------------------+------------------------------
ll or LL | long long int | long long int
| | unsigned long long int
-------------+------------------------+------------------------------
Both u or U | unsigned long long int | unsigned long long int
and ll or LL | |


В этой таблице указывается, какой тип будет иметь целочисленная константа. Тип целочисленного константы будет первым типом, в котором оно соответствует значению.

Это означает, что компилятор будет перебирать следующие типы для шестнадцатеричной константы 0x800000000000000 (у нее нет суффикса, поэтому она использует строку "none", и она является шестнадцатеричной константой, поэтому использует "шестнадцатеричную константу", столбец), и он будет использовать первый тип, который может сохранить это значение *:
• int: Нет, 32-разрядное целое со знаком не может сохранить это значение.
• unsigned int: Нет, 32-разрядное целое число без знака не может сохранить это значение.
• long int: Нет, 32-разрядное целое со знаком не может сохранить это значение.
• unsigned long int: Нет, 32-разрядное целое число без знака не может сохранить это значение.
• long long int: Нет, 64-разрядное целое со знаком не может сохранить это значение.
• unsigned long long int. Да, это 64-разрядное целое без знака может сохранить это значение. Так как это первый тип, который может полностью сохранить значение, это тип, который будет иметь константа целого.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4848 / 2492 / 696
Регистрация: 18.10.2014
Сообщений: 4,326
04.11.2018, 09:49 4
Цитата Сообщение от ft4l Посмотреть сообщение
UL это суффикс указывающий компилятору на тип этой числовой константы (беззнаковое целое)
Тип - именно unsigned long. "Беззнаковое целое" - это просто U.

Цитата Сообщение от ft4l Посмотреть сообщение
хотя здесь сама запись 0x800000000000000 даёт ему понять что число умещается только в long long
Суффикс UL запрашивает unsigned long. Умещается ли в него число или нет - никто не знает, ибо зависит от реализации. Если не уместится, то будет использоваться unsigned long long. Именно unsigned long long, а не long long.
0
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
4576 / 3290 / 3937
Регистрация: 05.06.2014
Сообщений: 16,448
04.11.2018, 09:50 5
О, уже ответили. Виноват.
0
ft4l
Невнимательный
252 / 215 / 91
Регистрация: 08.02.2013
Сообщений: 641
Записей в блоге: 1
04.11.2018, 10:17 6
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Суффикс UL запрашивает unsigned long. Умещается ли в него число или нет - никто не знает
должен знать тот кто собирается как-то использовать это значение
насколько знаю внезавивимости от систем long это только четыре байта
//в отличие например от int
По поводу U солидарен
0
04.11.2018, 10:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2018, 10:17

Что такое стек?
Объясните как они хранятся в памяти и что такое стек. Насколько я понял, стек это как стопка книг....

Что такое __iob_func?
Что такое __iob_func? Это указатель на функцию или что-то другое? _CRTIMP FILE * __cdecl...

Что такое в программе k[2], k[i]?
#include &lt;stdio.h&gt; #include &lt;locale&gt; int main () { setlocale(LC_ALL, &quot;RUSSIAN&quot;);...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru