dmitry_dev33
@dmitry_dev33

Правильно ли сделаны пояснения к коду?

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#include <locale.h> 

void main() 
{ 
setlocale(LC_ALL, "RUS"); 

char c = 518; 
printf("\n Число в целочисленном знаковом формате= %d", c); //Если число 518 перевести в двоичную систему счисления, то мы получим 1000000110.
// Тип char весит 1 байт или 8 бит. Но полученное число в двоичном коде состоит из 10 цифр, т.е. занимает 10 бит. Поэтому 1 старший бит отпадает и остается 00000110. 
//Так как формат целочисленный беззнаковый, то старший бит не отвечает за знак.
// В итоге, если мы переведем данное число из двоичной системы счисления обратно в десятичную, то мы получим число 6. 
printf("\n"); 
printf("___________________________________________________________________________________________ \n\n"); 
system("pause"); 
}
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
1. Уже в строке char c = 518; будет записано значение 6 в переменную c. Отсечение старших байтов.
2. На строке с printf, значение c (6) будет преобразовано к типам соответственно unsigned int и int, по соглашению вызова функций.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@abcd0x00
Вот ты не понимаешь, что такое знаковый тип, поэтому пишешь неправильно.

10000001b - вот это значение может храниться в переменной как знакового (signed char или просто char (иногда где-то может быть беззнаковым), так и беззнакового (unsigned char) типа. Значение хранится одно и то же, а означает разные величины, в зависимости от типа переменной, в которой хранится.

Но чем отличаются знаковый тип от беззнакового: переменная знакового типа может переполниться и при переполнении может давать неопределённые результаты; а переменная беззнакового типа не может переполниться, там определённо всё лишнее отсекается (поэтому битовые операции проводят на беззнаковых переменных).

Так что число отрицательное не потому, что у него там бит знака равен единице, а потому что тот бит вообще считается битом знака, так как число хранится в переменной знакового типа.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы