Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
1

приведение типов

31.07.2011, 18:02. Показов 2254. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
подскажите, что надо почитать, чтобы понять как происходит на пример усечение при приведении типов - хочу понять почему к примеру при таком приведении:

C#
1
2
int i = 257;
byte x = i;
при выводе результата значение x будет равно 1

я так понимаю, что там усекаются старшие разряды числа поэтому получается число 1
хотелось бы разобраться как это все происходит, чтобы понимать почему именно 1 получилось, а не 2, 3 или 100
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2011, 18:02
Ответы с готовыми решениями:

Не требуется приведение типов при умножении типов Byte
Читал тут книгу(Г. Шилдт, "Полный справочник по C#"), и нашел такое (ст. 77) Поскольку при...

Приведение типов
Подскажите как сделать так, чтобы в теле цикла не выдавало ошибку. не пойму как можно преобразовать...

Приведение типов
Здравствуйте. Как привести тип ArraуList к типу RibbonDropDownItem? Просто пишу надстройку для...

Приведение типов
Добрый день! Никак не могу сообразить возможно ли создать класс в котором есть переменная типа...

17
311 / 249 / 44
Регистрация: 06.12.2010
Сообщений: 527
31.07.2011, 18:09 2
А если так? Хотя я могу чего-то не понимать
C#
1
2
int i = 257;
byte x = (byte)i;
1
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
31.07.2011, 18:09 3
потому что byte - число со знаком. единица там выглядит так
0000 0001
, а минус единица - так:
1111 1111
все, что содержит единицу в самом старшем значащем бите (левом) - есть отрицательное число.
в int :

1: 00000000 00000000 00000000 00000001
255: 00000000 00000000 00000000 11111111

-1: 11111111 11111111 11111111 11111111

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

почитай о представлении чисел в памяти машины.
1
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
31.07.2011, 18:15  [ТС] 4
Цитата Сообщение от umnick_kh Посмотреть сообщение
А если так? Хотя я могу чего-то не понимать
C#
1
2
int i = 257;
byte x = (byte)i;
ну да, именно так =)) просто забыл написать (byte)

Добавлено через 2 минуты
Цитата Сообщение от novi4ok Посмотреть сообщение
почитай о представлении чисел в памяти машины.
а ссылку на какой-нибудь справочник на эту тему можно? =)
0
67 / 67 / 9
Регистрация: 18.04.2011
Сообщений: 124
31.07.2011, 18:21 5
Olejeg85, а как же)
0
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
31.07.2011, 20:07  [ТС] 6
Цитата Сообщение от somethingrotten Посмотреть сообщение
Olejeg85, а как же)
зачем мне ссылка на типы данных? =))
0
Alex_Sabaka
31.07.2011, 21:51
  #7

Не по теме:

Цитата Сообщение от novi4ok Посмотреть сообщение
потому что byte - число со знаком. единица там выглядит так
Только я это вижу???

0
185 / 188 / 17
Регистрация: 26.11.2010
Сообщений: 511
31.07.2011, 22:16 8
Цитата Сообщение от novi4ok Посмотреть сообщение
потому что byte - число со знаком. единица там выглядит так
0000 0001
, а минус единица - так:
1111 1111
все, что содержит единицу в самом старшем значащем бите (левом) - есть отрицательное число.
в int :

1: 00000000 00000000 00000000 00000001
255: 00000000 00000000 00000000 11111111

-1: 11111111 11111111 11111111 11111111

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

почитай о представлении чисел в памяти машины.
В корне неверно!

byte - беззнаковое 8-битовое число без знака.

0 выглядит так: 0000 0000
255 так: 1111 1111

Попробуем присвоить byte 256.
Это в двоичной системе
Код
 1111 1111
+
         1
__________
1 0000 0000
Обрезаем старший бит и получаем 0000 0000,что = 0.
Вы присваиваете 257, суть та-же.
1
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
01.08.2011, 00:43  [ТС] 9
пасиб, разобрался вроде бы немного
написал простенькую программку
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
 
class DemoSS
{
    static void Main()
    {
        char ch;
        Console.Write(@"********************************************
* Программа переводит число в двоичную СС. *
********************************************");
        do
        {
            Console.Write("\nВведите число: ");
            int i = int.Parse(Console.ReadLine());
 
            Console.Write("\nв двоичной СС: ");
            for (int ix = i; ix > 0; ix = ix / 2)
            {
                if ((i & ix) != 0) Console.Write(1);
                if ((i & ix) == 0) Console.Write(0);
            }
 
            Console.Write("\n\nПовторить? y/n: ");
            ch = char.Parse(Console.ReadLine());
        } while (ch != 'n');
 
    }
}
мм, а как-нибудь еще проще можно написать код?
0
54 / 54 / 9
Регистрация: 09.11.2010
Сообщений: 120
01.08.2011, 00:55 10
что сразу бросается в глаза
C#
1
for (int ix = i; ix > 0; ix /= 2)
0
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
01.08.2011, 01:07  [ТС] 11
Цитата Сообщение от Escapable Посмотреть сообщение
что сразу бросается в глаза
C#
1
for (int ix = i; ix > 0; ix /= 2)
это ты вообще к чему?
0
54 / 54 / 9
Регистрация: 09.11.2010
Сообщений: 120
01.08.2011, 01:12 12
вопрос:
мм, а как-нибудь еще проще можно написать код?
твой код:
C#
1
for (int ix = i; ix > 0; ix = ix / 2)
мой взгляд на упрощение:
C#
1
for (int ix = i; ix > 0; ix /= 2)
1
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
01.08.2011, 01:36  [ТС] 13
Цитата Сообщение от Escapable Посмотреть сообщение
вопрос:
твой код:
C#
1
for (int ix = i; ix > 0; ix = ix / 2)
мой взгляд на упрощение:
C#
1
for (int ix = i; ix > 0; ix /= 2)
аа, точно точно, спс =)

но я имел ввиду не только это изменение, а может еще какие-нибудь? =))
0
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
01.08.2011, 01:48 14
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
 
class DemoSS {
    static void Main() {
        int num = 3;
 
        int i = 1;
        // для красоты последующего вывода
        // (разворачивать не придется)
        while (i < num)
            i <<= 1;
        // туда же =)
        i >>= 1;
 
        for (; i > 0; i >>= 1)
            Console.Write((i & num) != 0 ? 1 : 0);
 
        Console.ReadKey();
    }
}
это я к тому, чтобы вкурил операторы работы с двоичными данными
1
185 / 188 / 17
Регистрация: 26.11.2010
Сообщений: 511
01.08.2011, 13:23 15
Когда-то писал класс для вывода числа в двоичной системе. Работает для всех целых типов (+ char)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    class BitWriter<T>
    {
        private readonly int _numberOfBits;
 
 
        public BitWriter()
        {
            _numberOfBits = GetNumberOfBits(typeof(T));
        }
 
 
        public string WriteBirwise(T c)
        {
            string s = string.Empty;
            for (int i = _numberOfBits; i >= 0; i--)
                s = String.Concat(s, ((Convert.ToUInt64(c)) >> i) & 1);
            return s;
        }
 
        static public int GetNumberOfBits(Type t)
        {
            return t == typeof (byte)? 8: (t == typeof (short)? 16:(t == typeof (char)? 16: (t == typeof (ushort)? 16: (t == typeof (int)? 32: (t == typeof (uint)? 32: (t == typeof (long) ? 64 : (t == typeof (ulong) ? 64 : -1)))))));
        }
    }
0
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
01.08.2011, 13:28 16
Цитата Сообщение от Killster Посмотреть сообщение
GetNumberOfBits
C#
1
sizeof(double) * 8
нет слов))
1
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
01.08.2011, 18:06 17
Mikant, в байте необязательно 8 бит)
0
185 / 188 / 17
Регистрация: 26.11.2010
Сообщений: 511
01.08.2011, 20:20 18
Цитата Сообщение от Mikant Посмотреть сообщение
C#
1
sizeof(double) * 8
нет слов))
Бывает, не знал
Смысл в том, что нам так и так проверять, какие типы мы можем выводить в таком представлении, так что тут особой разницы и нет

Но за оператор спасибо
0
01.08.2011, 20:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.08.2011, 20:20
Помогаю со студенческими работами здесь

Приведение типов
Здравствуйте. Есть задание:Даны два массива X и Y одинакового размера. Найти i, при котором...

Приведение типов
Доброго времени суток! Пытаюсь получить значение поля Text из BindingExpression различных...

Приведение типов
Здравствуйте уважаемые! Помогите пожалуйста: Есть библиотека VK.net и пример с отправкой...

Приведение типов
Доброго времени суток! Прошу помощи с решением данного задания. Я пытался решить, но возникли...


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

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