Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что означает эта запись? 
:(
    Опции темы
rthsobakas
Дата 11.4.2009, 20:16 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 562
Регистрация: 20.9.2007

Репутация: нет
Всего: -1



Что означает эта запись?
 UINT64 id;
id=id<<1;

and

UINT64 v;
v=v>>6;


То есть не совсем ясно сущность >> в данном случае
PM   Вверх
X-3R1
Дата 11.4.2009, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 28.4.2007

Репутация: 1
Всего: 2



смещение влево на один бит, и вправо на 6 бит
PM MAIL   Вверх
azesmcar
Дата 11.4.2009, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



PM   Вверх
rthsobakas
Дата 11.4.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 562
Регистрация: 20.9.2007

Репутация: нет
Всего: -1



X-3R1,  сдвиг какой? циклический арифметический? То есть сдвигает и нули пишет или переносит бит?
PM   Вверх
zim22
Дата 11.4.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(rthsobakas @  11.4.2009,  20:44 Найти цитируемый пост)
 сдвиг какой? циклический арифметический? То есть сдвигает и нули пишет или переносит бит?

а вы сами не можете проверить?
Код

#include <windows.h>
#include <iostream>

void printBit(UINT64 &var)
{
  UINT64 mask = 1;
  for (int i = 0; i != 64; ++i)
    if (mask << i & var) std::cout << "1";
    else std::cout << "0";    
  
  std::cout << std::endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
   UINT64 id = 9999999999999999999;      
   printBit(id);   
   id=id<<1;
   printBit(id);      


UINT64 v = 9999999999999999999;
printBit(v);   

v=v>>6;
   printBit(v);   

    return 0;
}



Это сообщение отредактировал(а) zim22 - 11.4.2009, 20:58


--------------------
PM MAIL   Вверх
inside_pointer
Дата 12.4.2009, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 9.3.2008

Репутация: 5
Всего: 12



Цитата(rthsobakas)

То есть сдвигает и нули пишет или переносит бит?

ничо не переносит, просто сдвигает и всё (слева будет ставить бит знака, а справа нули)
есть разница между signed и unsigned, у unsigned бит знака ноль, а у signed может быть ноль, а может быть еденица, что там стоит, то и будет ставиться

Это сообщение отредактировал(а) inside_pointer - 12.4.2009, 00:32
PM MAIL   Вверх
mes
Дата 12.4.2009, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(inside_pointer @  11.4.2009,  23:10 Найти цитируемый пост)
у unsigned бит знака ноль, а у signed может быть ноль, а может быть еденица

у unsigned нет знакового бита



--------------------
PM MAIL WWW   Вверх
inside_pointer
Дата 12.4.2009, 04:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 9.3.2008

Репутация: 5
Всего: 12



да есть он, просто он нулю равен всё время

update:
иначе как она определяет signed там или unsigned и чем заполнять

Это сообщение отредактировал(а) inside_pointer - 12.4.2009, 04:36
PM MAIL   Вверх
W4FhLF
Дата 12.4.2009, 05:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(inside_pointer @  12.4.2009,  04:19 Найти цитируемый пост)
иначе как она определяет signed там или unsigned и чем заполнять


На этапе компиляции определяет набор команд и действий. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
inside_pointer
Дата 12.4.2009, 06:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 9.3.2008

Репутация: 5
Всего: 12



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

почему unsigned - положительное число ?
если компилятор знает про знак, как он его определяет у unsigned ?
я думаю там стоит ноль где-то

PM MAIL   Вверх
zim22
Дата 12.4.2009, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(inside_pointer @  12.4.2009,  06:17 Найти цитируемый пост)
я думаю там стоит ноль где-то

а вы сами проверьте


--------------------
PM MAIL   Вверх
azesmcar
Дата 12.4.2009, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



inside_pointer

нету у unsigned знакового бита, т.е. сам бит есть, но он не используется для хранения знака и не для хранения просто нуля. А для того чтобы хранить больше данных, т.е. использовать знаковый бит для хранения числа.
Код

    int a = INT_MAX;
    unsigned int b = UINT_MAX;
    std::cout << a << std::endl;
    std::cout << b << std::endl;


PM   Вверх
inside_pointer
Дата 12.4.2009, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 9.3.2008

Репутация: 5
Всего: 12



понимаешь, он может ноль слева ставить просто так, для всех, а может для знаковых ставить знаковый бит, и, вот, если он для знаковых ставит знаковый бит, то почему он для беззнаковых не ставит знаковый бит (ну который всегда равен нулю) ?
если сравнить число unsigned с нулём, почему оно больше ?
PM MAIL   Вверх
zim22
Дата 12.4.2009, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(inside_pointer @  12.4.2009,  11:01 Найти цитируемый пост)
если сравнить число unsigned с нулём, почему оно больше ?

Код
unsigned int i = 0;
if (i ==0) std::cout << "i == 0";




--------------------
PM MAIL   Вверх
GoldFinch
Дата 12.4.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



нету никакого знакового бита в целых числах, 
то что старший разряд отрицательного целого числа равен 1, это не говорит о том что это знаковый бит

если бы в целых числах использовался знаковый бит, то int(-1) было бы 0x80000001, а не 0xFFFFFFFF
и операция отрицания выглядела бы как "x=x xor 0x80000000" а не "x=(not x)+1 "

знаковый бит используется в вещественных числах, там действительно изменение 1 разряда меняет знак числа, и там есть +0 и -0
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1317 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.