如何手动计算像~0x000C这样的表达式?

Per*_*ero 0 c bit-manipulation bit

我是电气工程专业的学生.在我们的编程课上,我们获得了大量的C语言练习,并要求解释发生了什么以及IDE如何执行位操作.

因此,例如,如果我给出unsigned short x = 0x000C并执行~x,则输出为65523.您的IDE如何执行此操作?

Tre*_*her 6

为了提供一些上下文,一般来说,我们使用以下前缀来表示数字的不同基本表示:

  • 没有前缀意味着基数10,也就是小数(我们在日常生活中使用的)
  • 0x表示base-16,也就是十六进制(从0-9A-F开始计数,因此单个数字可以表示0到15之间的任何值...这需要4位,因为数字15的十进制表示为0b1111)
  • 0b 表示base-2,又名二进制(从0到1 ......需要每位1位)
  • 0 表示base-8,也称为八进制(从0到7 ......需要每位3位)

所以,考虑到你可能已经知道但另一个用户可能不知道,这就是幕后以非常高级的方式发生的事情.假设unsigned short您的环境中有16位宽,并且给出了......

unsigned short x = 0x000C = 0b0000 0000 0000 1100

... a ~是一个按位否定运算符,这意味着你只需翻转所有位.所以,例如:

~0b0000 0000 0000 1100 = 0b1111 1111 1111 0011 = 0xFFF3 = 65523

作为一个注释,当你开始尝试用语言(如Python和VBScript)将它们像整数抽象为"无限大数"时,这样的事情会变得棘手.翻转16位无符号短路的位与翻转"无限大数"的位有很大不同,而且更有可能.