65 / 3 / 0
Регистрация: 01.07.2014
Сообщений: 38
|
||||||
1 | ||||||
Почему int так работает?03.07.2014, 23:06. Показов 2543. Ответов 6
Метки нет Все метки)
(
1. Задача:
Обычно под переменную типа int отводится 4 байта. Определите (узнайте, вспомните) максимально и минимально возможные значения для переменных такого типа. Объявите в программе переменную max типа int и присвойте ей значение на единицу больше максимально допустимого. Запрограммируйте вывод значения переменной на экран. Скомпилируйте программу и запустите. Чему равна переменная? Почему? Моё решение:
Я понимаю, что в одном байте 8 бит и в 1 байт можно записать 2^8 (256) разных вариантов комбинаций восьмистроковых единичек и ноликов, поэтому максимальное знаечение int может быть 2^32 т.к. оно 4-рех битное. Соответственно диапазон чисел с которым можно работать в int - от -2147483648 до 2147483647, либо от 0 до 4294967295 если не брать отрицательные числа. Я пробовал увеличивать max на два. Результат "-2147483647", увеличил на 3 - результат "-2147483646". Почему так происходит? И почему когда я присваиваю max значение 4294967295 то получаю в результате -1 ?
0
|
|
03.07.2014, 23:06 | |
Ответы с готовыми решениями:
6
Почему работает не так как надо?
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
03.07.2014, 23:16 | 2 |
![]() Решение
dleen, А Вы посмотрите HEX значения до и после операций. Это переполнение разрядной сетки.
0
|
![]() 4845 / 3857 / 1599
Регистрация: 24.04.2014
Сообщений: 11,316
|
|
03.07.2014, 23:57 | 3 |
dleen, для простоты на примере 1-байтовых чисел
целые числа со знаком представляются так. для положительных: первый бит 0, остальные 7 - число в 2 системе счисления. например 5 будет представлено так: 0000 0101. Максимально возможное число получится 0111 1111, т.е. 127 отрицательные числа: сначала модуль числа записывается в двоичной системе, затем все биты инвертируются и прибавляется 1. это делается для устранения двойного нуля. для числа -5 запись будет такая: 5 = 0000 0101. после инверсии: 1111 1010. и +1 -5 = 1111 1011. минимально возможное число: 1000 0000 = -128 теперь что произойдет если к 127 + 1. для компьютера нет никакой разницы знаковые числа или беззнаковые, для него это просто набор бит, вычислит он это так: 0111 1111 + 1 = 1000 000. Если интерпретировать данный результат как знаковое число, то получится -128
2
|
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
|
||||||
04.07.2014, 00:33 | 4 | |||||
![]() Решение
0
|
65 / 3 / 0
Регистрация: 01.07.2014
Сообщений: 38
|
|
04.07.2014, 18:55 [ТС] | 5 |
Jewbacabra, спасибо! Теперь понял.
![]()
0
|
Модератор
![]() 8808 / 6591 / 894
Регистрация: 14.02.2011
Сообщений: 23,173
|
||||||
04.07.2014, 19:11 | 6 | |||||
зависит от системы есть и 2 байта и 4 и 8
ну в свете того что тебе объяснили есть 2 типа int знаковый и беззнаковый у безнакового максимальное значение это когда все биты в 1 ( для знакового это же значение -1) для знакового максимальное это все биты, кроме старшего(знаковый бит) установлены в 1 вот пример который сработает на любых размерах int, числа правда будут разные
это делается чтобы в сумме был 0 ![]() например -1+1=0 11111111+1=0
1
|
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
|
||||||
06.07.2014, 10:13 | 7 | |||||
Преподавателя - на мыло. Чему он детей учит? ВСПОМИНАТЬ??? Программист должен думать, а не заучивать тупо. Пусть компьютер помнит - у него голова большая.
1
|
06.07.2014, 10:13 | |
Помогаю со студенческими работами здесь
7
Пояснить, почему переменная объявляется как int Почему выводит все нули? int или double
Почему функция scanf() считывает несколько целых чисел только с int? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |