Размер char в битах
От: Sir Wiz Россия  
Дата: 28.06.04 10:12
Оценка:
Предпосылки следующие:

"sizeof(char) is 1" по стандарту, 5.3.3/1

Тип byte в стандарте не описан. (Я не нашёл)
В винде вводится как
typedef unsigned char byte; // RPCNDR.H

О байте говорится следующие:
"The fundamental storage unit in the C++ memory model is the byte" 1.7/1,
однако никто не говорит, что байт это 8 бит, напротив,
"A byte is at least large enough to contain any member of the basic execution character set and is composed of a contiguous sequence of bits, the number of wich is implmentation-defined" 1.7/1.

То есть, не менее 7 бит (достаточно для "basic execution character set"), и только в MSDN говорится, что байт есть 8 бит. Однако, возможно и большее количество. Но sizeof(char) всегда будет 1. Значится, меряем в попугаях.

Внимание, вопрос! Как узнать сколько бит в char?
... << RSDN@Home 1.1.3 stable >>
Re: Размер char в битах
От: SergeMukhin Россия  
Дата: 28.06.04 10:17
Оценка:
Здравствуйте, Sir Wiz, Вы писали:

SW>Внимание, вопрос! Как узнать сколько бит в char?


CHAR_BIT

и без всяких предпосылок
---
С уважением,
Сергей Мухин
Re[2]: Размер char в битах
От: Sir Wiz Россия  
Дата: 28.06.04 10:34
Оценка:
Здравствуйте, SergeMukhin, Вы писали:

SW>>Внимание, вопрос! Как узнать сколько бит в char?

SM>CHAR_BIT
SM>и без всяких предпосылок
Фи. Это же #define, да ещё из Си-библиотеки. Вобщем сплошной deprecated.
Вот концептуальное решение:

    long bitsInChar = 1;
    unsigned char temp = 1;
    while (temp <<= 1) 
        ++bitsInChar;


... << RSDN@Home 1.1.3 stable >>
Re[3]: Размер char в битах
От: maq Россия http://www.maqdev.com
Дата: 28.06.04 10:39
Оценка:
SW>Фи. Это же #define, да ещё из Си-библиотеки. Вобщем сплошной deprecated.
SW>Вот концептуальное решение:

SW>
SW>    long bitsInChar = 1;
SW>    unsigned char temp = 1;
SW>    while (temp <<= 1) 
SW>        ++bitsInChar;
SW>


А если платформа big endian?
... << Rsdn@Home 1.1.4 beta 1 >>
Re[4]: Размер char в битах
От: Анатолий Широков СССР  
Дата: 28.06.04 10:46
Оценка:
maq>А если платформа big endian?

А что это меняет?
Re[4]: Размер char в битах
От: Sir Wiz Россия  
Дата: 28.06.04 10:50
Оценка:
Здравствуйте, maq, Вы писали:

SW>>
SW>>    long bitsInChar = 1;
SW>>    unsigned char temp = 1;
SW>>    while (temp <<= 1) 
SW>>        ++bitsInChar;
SW>>


maq>А если платформа big endian?

Кажется, что это не имеет значения. low/big endian — способы расположения байт в больших структурах (word). Здесь же речь идёт об однобайтовом char. Байт, как я уже цитировал стандарт — непрерывная последовательность бит определяемой реализацией компилятора длины. Должно работать.
... << RSDN@Home 1.1.3 stable >>
Re[3]: Размер char в битах
От: jazzer Россия Skype: enerjazzer
Дата: 28.06.04 10:57
Оценка:
Здравствуйте, Sir Wiz, Вы писали:

SW>Здравствуйте, SergeMukhin, Вы писали:


SW>>>Внимание, вопрос! Как узнать сколько бит в char?

SM>>CHAR_BIT
SM>>и без всяких предпосылок
SW>Фи. Это же #define, да ещё из Си-библиотеки. Вобщем сплошной deprecated.

Что-тоя не помню, чтобы эти дейфайны были depracated
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: Размер char в битах
От: SergeMukhin Россия  
Дата: 28.06.04 10:58
Оценка:
Здравствуйте, Sir Wiz, Вы писали:

SM>>CHAR_BIT

SM>>и без всяких предпосылок
SW>Фи. Это же #define, да ещё из Си-библиотеки. Вобщем сплошной deprecated.

вообще-то это из стандарта С++
---
С уважением,
Сергей Мухин
Re[4]: Размер char в битах
От: Sir Wiz Россия  
Дата: 28.06.04 11:12
Оценка:
Здравствуйте, jazzer, Вы писали:

SW>>>>Внимание, вопрос! Как узнать сколько бит в char?

SM>>>CHAR_BIT
SM>>>и без всяких предпосылок
SW>>Фи. Это же #define, да ещё из Си-библиотеки. Вобщем сплошной deprecated.
J>Что-тоя не помню, чтобы эти дейфайны были depracated
...Там смайлик стоял.

Да, как написал SergeMukhin, эти дефайны из стандарта. Но из раздела 18.2.2 "C library", а как писал Страуструп в книге "Язык программирования С++", 3-е издание, эти библиотеки включены в стандарт исключительно ради совместимости с миллионами строк уже написаного кода, а в адрес #define ругался словом deprecated (Не уверен, что именно этим, я читал русский перевод).

Вообщем, это уже бесцельная философия, а SergeMukhin спасибо за ответ, про CHAR_BIT я не знал / забыл.
... << RSDN@Home 1.1.3 stable >>
Re[5]: Размер char в битах
От: jazzer Россия Skype: enerjazzer
Дата: 28.06.04 11:17
Оценка:
Здравствуйте, Sir Wiz, Вы писали:

SW>Здравствуйте, jazzer, Вы писали:


SW>>>>>Внимание, вопрос! Как узнать сколько бит в char?

SM>>>>CHAR_BIT
SM>>>>и без всяких предпосылок
SW>>>Фи. Это же #define, да ещё из Си-библиотеки. Вобщем сплошной deprecated.
J>>Что-тоя не помню, чтобы эти дейфайны были depracated
SW>...Там смайлик стоял.

Смайлик смайликом, а ты народ все же не пугай, а то будут бояться пользоваться совершенно валидными вещами Стандарта :)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Размер char в битах
От: _nn_ www.nemerleweb.com
Дата: 28.06.04 11:22
Оценка: 1 (1)
Здравствуйте, Sir Wiz, Вы писали:

SW>Предпосылки следующие:


SW>"sizeof(char) is 1" по стандарту, 5.3.3/1


SW>Тип byte в стандарте не описан. (Я не нашёл)

SW>В винде вводится как
SW>typedef unsigned char byte; // RPCNDR.H

SW>О байте говорится следующие:

SW>"The fundamental storage unit in the C++ memory model is the byte" 1.7/1,
SW>однако никто не говорит, что байт это 8 бит, напротив,
SW>"A byte is at least large enough to contain any member of the basic execution character set and is composed of a contiguous sequence of bits, the number of wich is implmentation-defined" 1.7/1.

SW>То есть, не менее 7 бит (достаточно для "basic execution character set"), и только в MSDN говорится, что байт есть 8 бит. Однако, возможно и большее количество. Но sizeof(char) всегда будет 1. Значится, меряем в попугаях.


SW>Внимание, вопрос! Как узнать сколько бит в char?


Можно так :
char x=-1;
int n=0;
while(x>>1)
 n++;

n - количество бит в char.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Размер char в битах
От: Вадим Никулин Россия Здесь
Дата: 28.06.04 11:51
Оценка: 3 (1)
Здравствуйте, Sir Wiz, Вы писали:

SW>
SW>    long bitsInChar = 1;
SW>    unsigned char temp = 1;
SW>    while (temp <<= 1) 
SW>        ++bitsInChar;
SW>


Ну, разве это концептуально? Вот — в compile-time:

#include <iostream>

template<unsigned char k>
struct BitByte
{
   enum
   {
      val = static_cast<unsigned char>( BitByte<k<<1>::val+1 ),
   };
};

template<>
struct BitByte<0>
{
   enum
   {
      val = 0,
   };
};

struct BitCount
{
   enum
   {
      val = BitByte<1>::val,
   };
};

int main()
{
   std::cout << BitCount::val << std::endl;
   return 0;
}
Re[4]: Размер char в битах
От: Вадим Никулин Россия Здесь
Дата: 28.06.04 11:55
Оценка:
Захотел обобщить на любой тип, и обломился

'specialization' : a partial specialization cannot have a dependent non-type template parameter

int i;
int ai[5];

template<class T, T t>
struct A
{
};

template<class T>
struct A<T,5>
{
};   // C2754


Не понимаю трудностей Подскажите пункт стандарта, который это запрещает, plz.
Re[2]: Размер char в битах
От: Sir Wiz Россия  
Дата: 28.06.04 11:58
Оценка: +1
Здравствуйте, _nn_, Вы писали:

SW>>Внимание, вопрос! Как узнать сколько бит в char?


__>Можно так :

__>
__>char x=-1;
__>int n=0;
__>while(x>>1)
__> n++;

__>n - количество бит в char.
__>

Нет, так нельзя. Это не работает.

Во-первых вы, наверное, имели в виду while(x >>= 1).
Во-вторых, правый сдвиг отрицательных чисел implementation-defined, стандарт, 5.8/3.
Например, VC6 на правый сдвиг -1 на 1 бит возвращает -1, получаем бесконечный цикл.
В-третьих, неплохо бы в данном случае уточнять signed char x=-1. знаковость или беззнаковость char implementation-defined, стандарт, 3.9.1/1

Я писал пример рабочего кода.
... << RSDN@Home 1.1.3 stable >>
Re[5]: Размер char в битах
От: Lorenzo_LAMAS  
Дата: 28.06.04 12:00
Оценка: 2 (1)
ВН>Не понимаю трудностей Подскажите пункт стандарта, который это запрещает, plz.

14.5.4/9
Of course, the code must be complete enough to compile and link.
Re[4]: Размер char в битах
От: folk Россия  
Дата: 28.06.04 12:00
Оценка: 5 (3) +2
Здравствуйте, Вадим Никулин, Вы писали:

ВН>Здравствуйте, Sir Wiz, Вы писали:


SW>>
SW>>    long bitsInChar = 1;
SW>>    unsigned char temp = 1;
SW>>    while (temp <<= 1) 
SW>>        ++bitsInChar;
SW>>


ВН>Ну, разве это концептуально? Вот — в compile-time:


[]

std::numeric_limits<unsigned char>::digits


Изобретатели, блин
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Re[5]: Размер char в битах
От: Вадим Никулин Россия Здесь
Дата: 28.06.04 12:04
Оценка:
Здравствуйте, folk, Вы писали:

F>
F>std::numeric_limits<unsigned char>::digits
F>


F>Изобретатели, блин


Особенно прикольно смотреть, что специализация для char в VC7.0 возвращает CHAR_BIT
Re[4]: Размер char в битах
От: Sir Wiz Россия  
Дата: 28.06.04 12:08
Оценка:
Здравствуйте, Вадим Никулин, Вы писали:

ВН>Ну, разве это концептуально? Вот — в compile-time:

Да, это логичное и концептуальное воплощение моей мысли.

Я думал над подобным, но думалки не хватило. Изучаю. +3
... << RSDN@Home 1.1.3 stable >>
Re[5]: Размер char в битах
От: Вадим Никулин Россия Здесь
Дата: 28.06.04 12:25
Оценка:
Здравствуйте, Sir Wiz, Вы писали:

SW>Здравствуйте, Вадим Никулин, Вы писали:


ВН>>Ну, разве это концептуально? Вот — в compile-time:

SW>Да, это логичное и концептуальное воплощение моей мысли.

SW>Я думал над подобным, но думалки не хватило. Изучаю. +3


Начни с прочтения Александреску, думалка будет в другую сторону думать.
Re[6]: Размер char в битах
От: Вадим Никулин Россия Здесь
Дата: 28.06.04 12:27
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

ВН>>Не понимаю трудностей Подскажите пункт стандарта, который это запрещает, plz.


L_L>14.5.4/9


А про трудности? Что мешает?
Re[3]: Размер char в битах
От: _nn_ www.nemerleweb.com
Дата: 28.06.04 14:02
Оценка:
Здравствуйте, Sir Wiz, Вы писали:

SW>Здравствуйте, _nn_, Вы писали:


SW>>>Внимание, вопрос! Как узнать сколько бит в char?


__>>Можно так :

__>>
__>>char x=-1;
__>>int n=0;
__>>while(x>>1)
__>> n++;

__>>n - количество бит в char.
__>>

SW>Нет, так нельзя. Это не работает.

SW>Во-первых вы, наверное, имели в виду while(x >>= 1).

Да, конечно.
SW>Во-вторых, правый сдвиг отрицательных чисел implementation-defined, стандарт, 5.8/3.
Левый сдвиг значит надо сделать
SW>Например, VC6 на правый сдвиг -1 на 1 бит возвращает -1, получаем бесконечный цикл.
SW>В-третьих, неплохо бы в данном случае уточнять signed char x=-1. знаковость или беззнаковость char implementation-defined, стандарт, 3.9.1/1
Это пропущенно для краткости.

SW>Я писал пример рабочего кода.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: Размер char в битах
От: _nn_ www.nemerleweb.com
Дата: 28.06.04 14:21
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Здравствуйте, Sir Wiz, Вы писали:


SW>>Здравствуйте, _nn_, Вы писали:


SW>>>>Внимание, вопрос! Как узнать сколько бит в char?


Поторопился...
__>>>Можно так :
__>>>
__>>>char x=+1;
__>>>int n=0;
__>>>while(x>>1)
__>>> n++;

__>>>n - количество бит в char.
__>>>

SW>>Нет, так нельзя. Это не работает.

SW>>Во-первых вы, наверное, имели в виду while(x >>= 1).

__>Да, конечно.
SW>>Во-вторых, правый сдвиг отрицательных чисел implementation-defined, стандарт, 5.8/3.
__>Левый сдвиг значит надо сделать
SW>>Например, VC6 на правый сдвиг -1 на 1 бит возвращает -1, получаем бесконечный цикл.
SW>>В-третьих, неплохо бы в данном случае уточнять signed char x=-1. знаковость или беззнаковость char implementation-defined, стандарт, 3.9.1/1
__>Это пропущенно для краткости.

SW>>Я писал пример рабочего кода.

Заметил позже...
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Размер char в битах
От: Павел Кузнецов  
Дата: 29.06.04 00:57
Оценка:
Вадим Никулин:

> 'specialization' : a partial specialization cannot have a dependent non-type template parameter

>
>
> int i;
> int ai[5];
>
> template<class T, T t>
> struct A
> {
> };
>
> template<class T>
> struct A<T,5>
> {
> };   // C2754
>

>
> Не понимаю трудностей

Чтобы это компилировать, комплятору придется как-то кодировать литералы. В самом деле: какого типа второй параметр?
Posted via RSDN NNTP Server 1.9 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.