Я самостоятельно изучаю битовый сдвиг, перенося некоторые функции C++ на BigInteger .NET. Я заметил, что когда я сдвигал BigInteger, пустота заполнялась единицами.
Я считаю, что это связано с тем, что отрицательное число хранится в форме комплимента двойки.
BigInteger num = -126;
compactBitsRepresentation = (uint)(int)(num << 16);
Вот что произошло после сдвига (сначала самый значащий бит)
10000010 will be shifted 16
11111111100000100000000000000000 was shifted 16
Должен ли я всегда ожидать, что подобная операция битового сдвига будет действовать таким образом? Совместимо ли это с разными языками и реализациями «bigNumber», такими как OpenSSL?