Это потому, что архитектура ЦП основана на 8-битных байтах.
Современные ЦП с момента рождения. NET 32-битные и даже сейчас 64-битные.
Таким образом, регистры ЦП являются 32-битными (4 байта) или 64-битными (8 байтов).
Следовательно, все данные, обрабатываемые ЦП, с начала пути, внутри и из / в память и другие компоненты материнской платы и устройств основаны на этой дихотомии: 8, 16, 32, 64 и даже 128 и более в графическом процессоре или для специального процессора.
Следовательно, CPU для архитектурных и проблемы с производительностью, с которыми необходимо работать, говоря, что просто 32-битные регистры в системах x32 и 64-битные в системах x64.
Фактически,. NET целые числа, имеющие 4 байта, используют половину 64-битный регистр в системах x64.
64-битный ЦП
Руководства разработчика программного обеспечения для архитектур Intel® 64 и IA-32
Современные и общие c ЦП 32- и 64-битные. У них нет 128-битных регистров.
Таким образом, невозможно использовать 120 бит (64 + 56), как вы предлагаете, если только не создать специальную структуру данных, которая будет громоздкой, неуправляемой и контрпродуктивной, медленной, очень низкая производительность.
. NET используйте для кодирования decimal
четырех целых чисел по 4 байта для 32-битной совместимости с системами x32, если вы хотите спросить, почему бы не использовать long
.
И последнее слово: в тот день, когда мы будем на 128-битных процессорах, возможно, другой десятичный тип будет использовать полностью поддерживаемый изначально регистр для десятичных вычислений, и в этот день мантисса может быть оптимизирована, как вы надеетесь, например, с плавающей точкой и двойной :)
https://referencesource.microsoft.com/#mscorlib / system / decimal.cs
https://github.com/mono/mono/blob/master/mcs/class/corlib/corert/Decimal.cs
О int flags
и использование битов, я не знаю, как им управлять, но, пожалуй, могу предположить, что это сделано из соображений оптимизации. Возможно, он использует вычисление ЦП для арифметики с плавающей запятой c и возможностей мантиссы, или нет, я вообще не знаю.
https://en.wikipedia.org/wiki/Floating-point_arithmetic
введите описание изображения здесь