我是电气工程专业的学生。在我们的编程课上,我们得到了一堆 C 语言练习,并被要求解释会发生什么以及您的 IDE 如何执行位操作。
因此,例如,如果我得到 unsigned short x = 0x000C
并执行 ~x
,输出为 65523
。您的 IDE 如何执行此操作?
最佳答案
为了提供一些上下文,一般来说,我们使用以下前缀来表示数字的不同基本表示形式:
- 没有前缀表示以 10 为底,也就是十进制(我们在日常生活中使用的)
0x
表示 base-16,又名十六进制(从 0-9A-F 计数,因此单个数字可以表示 0 到 15 之间的任何值...这需要四位,因为数字 15有0b1111
) 的十进制表示
0b
表示 base-2,也就是二进制(从 0-1 计数...每个数字需要 1 位)0
表示 base-8,也就是八进制(从 0-7 计数...每个数字需要 3 位)
因此,考虑到这一点,您可能已经知道但其他用户可能不知道,这就是幕后以非常高层次的方式发生的事情。假设 unsigned short
在您的环境中是 16 位宽,并且给定...
无符号短 x = 0x000C = 0b0000 0000 0000 1100
...a ~
是按位否定运算符,这意味着您只需翻转所有位。所以,例如:
~0b0000 0000 0000 1100 = 0b1111 1111 1111 0011 = 0xFFF3 = 65523
请注意,当您开始尝试使用将整数等 native 类型抽象为“无限大数”的语言(如 Python 和 VBScript)时,此类事情会变得棘手。翻转 16 位无符号短整型的位与翻转“无限大数”的位有很大不同,而且可能性更大。
关于c - 如何手动计算像 ~0x000C 这样的表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43809461/