Несколько машин имеют так называемые «ловушечные представления». Это означает (например), что int
может содержать дополнительный бит (или более одного), чтобы указать, была ли она инициализирована или нет.
Если вы попытаетесь прочитать int
с этим битом, говоря, что он не был инициализирован, он может вызвать какую-то ловушку/исключение/ошибку, которая (например) немедленно отключает вашу программу с каким-то сообщением об ошибке. Каждый раз, когда вы напишите значение int
, это представление ловушки очищается, поэтому чтение из него может/будет работать.
В основном, когда начинается ваша программа, она инициализирует всеint
s для таких ловушек. Если вы попытаетесь прочитать из неинициализированной переменной, аппаратное обеспечение сразу поймает ее и выдаст сообщение об ошибке.
Стандартные мандаты, что для unsigned char
, не допускается такое ловушечное представление - все биты unsigned char
должны быть «видимыми» - они должны составлять часть значения. Это означает, что ни один из них не может быть скрыт; no образец бит, который вы положили в unsigned char
, может сформировать представление ловушки (или что-то подобное). Любые биты, которые вы помещаете в unsigned char
, должны просто составить какое-то значение.
Любой другой тип, однако, может имеет ловушки. Если, например, вы берете несколько (более или менее) произвольно выбранных 8 бит из другого типа и читаете их как unsigned char
, они всегда будут формировать значение, которое вы можете прочитать, записать в файл и т. Д. Если, однако, вы пытаетесь их прочесть как any другой тип (signed char
, unsigned int
и т. д.) для него возможно сформировать ловушечное представление и попытаться сделать что-нибудь с ним может дать неопределенное поведение.
+1 * так * гораздо легче читать, чем я пытался (ужасно) сказать. – WhozCraig
Вы имеете в виду, что бит, представляющий знак, не участвует в представлении чисел? –
@DmitryFucintv: бит знака участвует. Я имею в виду, что есть одна битовая диаграмма, полученная путем отрицания нуля (установка всех битов в одном дополнении или установка только знакового бита в знаковой величине), которая не представляет число. –