Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何正确填充负二进制数?_C#_Binary - Fatal编程技术网

C# 如何正确填充负二进制数?

C# 如何正确填充负二进制数?,c#,binary,C#,Binary,它可以完美地处理正数,我知道我可以手动截断前两组1来解决这个问题,但是有没有更好的方法呢? 示例代码以32位而不是指定的24位输出: var s = Convert.ToString(-3, 2).PadLeft(24, '0'); Console.WriteLine(s); //Expected: 1111 1111 1111 1111 1111 1101 //Actual: 1111 1111 1111 1111 1111 1111 1111 1101 PadLeft将最小长度应用于字符串

它可以完美地处理正数,我知道我可以手动截断前两组1来解决这个问题,但是有没有更好的方法呢? 示例代码以32位而不是指定的24位输出:

var s = Convert.ToString(-3, 2).PadLeft(24, '0');
Console.WriteLine(s);
//Expected: 1111 1111 1111 1111 1111 1101
//Actual: 1111 1111 1111 1111 1111 1111 1111 1101
PadLeft将最小长度应用于字符串,但您希望字符串的长度正好为24个字符

因此,除了PadLeft之外,当字符串超过24个字符时,还需要使用Substring来截断字符串:

string s = Convert.ToString(-3, 2);
// assuming the int is always representable by 24 bits two's complement
if (s.Length < 24) { // alternatively, check integer is positive
    s = s.PadLeft(24, '0');
} else if (s.Length > 24) { // alternatively, check integer is negative
    s = s.Substring(8);
}

1111111111111111111111111101是16777213,不是-3。@GSerg前导1的数量无关紧要,它们只是填充未使用的位。如果你写的是24位的-3,你不会把你在程序员计算器中看到的所有1都加起来。您只需要足够的空间来填充剩余的位。是否希望生成的字符串正好包含24个字符?@Sweeper是,它需要适合ARM的分支指令,该指令需要24位。uint opcode=uintofset&0xffffff;第一个if语句应该使用“==”而不是“@chotcher如果长度等于24,则不需要做任何事情来处理字符串,对吗?另外,我认为Hans Passant在评论中的解决方案更好。如果是24,那么按照正常程序执行。@Chitcher,你知道是什么吗?只有当字符串的长度小于第一个参数时,它才会起作用。哦,我明白了。你的密码和我的不同。我把我的都放在一行了。
Convert.ToString(-3 & 0xffffff, 2).PadLeft(24, '0');