Windows 10 计算器用于计算二进制表示的补码值

Windows 10 计算器用于计算二进制表示的补码值

如何在程序员模式下使用 Win10 计算器来计算输入二进制表示的 2 的补码值。计算器似乎总是将输入的二进制序列视为无符号序列。我想知道是否有办法让它将序列视为 2 的补码序列。

编辑:根据 Peter 的以下评论,澄清了我的问题:我正在寻找计算二进制序列的 2 的补码值的方法。抱歉造成混淆。

答案1

简直就是没有无符号类型在 Windows 计算器中。如果您打开值的高位,则该值始终是有符号的。您可以打开“大型切换键盘”点击上方的按钮“位移”然后点击顶部查看

因为2的补码只是意味着否定值,只需按下+/-零键左侧的按钮,就会获取当前值的 2 的补码值

例如,如果您输入 2 并按下按钮,它将变成十进制的 -2,以及除最低有效位外所有位均为 1 的二进制值。+/-再次按下按钮,将显示 -2 的 2 的补码

另一件需要注意的事情是,中间的按钮决定了你想使用多少位。如果你使用的是 DWORD(即 32 位),那么输入 16 位十六进制或二进制值将始终返回正值,但如果你更改为 WORD(16 位),那么如果第 16 位1,则该值将变为负值

计算器负值示例


稍微偏离主题,但我建议使用 PowerShell 进行更复杂的编程相关计算,尤其是无符号 64 位运算,因为它支持 .NET 框架中的任何类型。Windows 计算器目前不支持无符号或十进制类型,因此64 位无符号运算将会很棘手。许多PowerShell 中的运算符比 C# 中的对应代码稍长一些,但你会比点击计算器按钮更快地得到结果。了解计算器应用程序中的所有快捷键并不容易,所以你必须在某些时候使用鼠标

要获取的二进制补码值,x只需使用-x。或者您可以从二进制补码的定义中获取结果:

$x = 123
$complement_x = ($x::MaxValue + 1) - $x

PowerShell 就像是 .NET 框架的前端,因此可以从 PowerShell 调用任何 .NET 或 Win32 函数。上面的数学函数主要来自.NET 数学类数字命名空间。您将把类 .NET 类型放入 中[],例如Math 类的[math][system.math](PowerShell 不区分大小写)。请参阅用做数学System.Math。下面是一些可能对程序员有用的其他内容:

  • 按位运算(按位运算符以 开头-b

    [uint64]::MaxValue/3 + (-bnot 20) + (1L -shl 22) + (0x23 -band 0x34)
    
  • 大整数数学:[bigint]::Pow([uint64]::MaxValue, 20)

  • 任意整数和浮点数学表达式

    1.56 + 0.23/[math]::Pow([math]::Sqrt([math]::Log(20) + [math]::Sin([math]::PI/3)), 4)
    
  • 数学十进制类型(128 位):1.23d * 3.45d / 28

  • 数学128 位 整数类型

  • 计算文件或对象大小:使用12.5GB + 5.8MB + 1392KB二进制单位和12.5e9 + 5.8e6 + 1392e3十进制单位的数字后缀(G = 1e9,M = 1e6,K = 1e3)

  • 转换为/从 base64 转换:[Convert]::ToBase64String[Convert]::FromBase64String

  • 约会时间操作。例如,将原始 Epoch 值转换为日期时间,反之亦然

    [datetime]::FromFileTime(0x01d15614cbaee92c)
    [datetime]::ParseExact("08-12-2012","dd-MM-yyyy", `
            [System.Globalization.CultureInfo]::InvariantCulture)
    
  • 字符串格式化和进制转换。String.Format.NET 支持将起作用。有关更多信息,请阅读格式化运算符。您还可以进行高级字符串和正则表达式操作。以下是一些示例:

    'somestring'.Substring(4) * 3 -replace 'ings', 'eet'
    '{0:X}' -f (0x12 + 34)
    [convert]::ToString(0x12 + 34, 16)
    'This is an emoji' + [char]::ConvertFromUtf32(0x1F60A)
    
  • 直接的XMLCSVJSON...操纵

  • 直接调用*.DLL/*.SO文件中的函数

  • GUI 编程。是的,PowerShell 足够强大,许多人确实用 PowerShell 编写 WinForm 应用程序。这是一个小示例剪贴板历史记录应用

    PowerShell 中的剪贴板历史记录应用程序

上述内容的示例

PowerShell 示例

欲了解更多信息,您可以阅读

或关注Scripto 博士的博客

相关内容