回答
问题1
为什么〜0xF等于0xFFFFFFF0?
首先,这意味着你在32位机器上运行它。这意味着0xF实际上是在hexadecimal0x0000000F
,
这意味着0xF是 0000 0000 0000 0000 0000 0000 0000 1111
的二进制形式。
的~
的操作装置的非操作。在二进制表示中,每0到1和每1到0更改。这将使〜0xF成为:二进制表示中的 1111 1111 1111 1111 1111 1111 1111 0000
。
这实际上是0xFFFFFFF0
。
请注意,如果你这样做了16位机上的~0xF
答案是0xFFF0
。
问题2
你写了错误的说法,应该是0xF & 0x1
。请注意,0x1
0x01
,0x001
和0x0001
都是相同的。因此,让我们改变这个hexdecimal号二进制表示:
0xF
是:
0000 0000 0000 0000 0000 0000 0000 1111
和0x1
是:
0000 0000 0000 0000 0000 0000 0000 0001
的&
操作遵循以下规则:
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
这样算下来,为每一位,你得到的结果是:
0000 0000 0000 0000 0000 0000 0000 0001
这实际上是0x1
。
附加
|
装置按位或运算。它遵循:
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
^
指按位异或运算。它遵循:
0^0 = 0
0^1 = 1
1^0 = 1
1^1 = 0
你可以得到更多的信息here。
如果您存储0xF在一个32位的 “诠释”,所有32位翻转,所以〜0xF = 0xFFFFFFF0。
看到这个: http://teaching.idallen.com/cst8214/08w/notes/bit_operations.txt
他们给了很好的解释
你否定0xF,其翻转所有位的他们的倒数。因此,例如,您有8位:0xF = 00001111
。如果你否定它,它会变成11110000
。
由于您使用的是32位,所以F就完全扩展了。 1111 .... 0000
关于第二个问题,您使用的是逻辑与,不按位与。这两个行为完全不同。
“您正在否定0xF” - 错误;倒置不是否定。 –
这听起来像你的困惑是,你相信0xF是一样的0b1111111111111111。它不是,它是0b0000000000001111。
〜0xF反转其所有位,去
from 0x0000000F = 00000000000000000000000000001111 (32 bits)
to 0xFFFFFFF0 = 11111111111111111111111111110000 (32 bits)
一个& & b为1,如果a和b是非零,和〜0xF和0x01都是非零的。
在C中,~0xF
永远不能等于0xFFFFFFF0
。前者是负数(C允许的三个签名表示中的任何一个),后者是一个正数。但是,如果二者在二进制补码实现中转换为32位无符号类型,转换后的值将相等。
至于~0xF && 0x01
,&&
算子是逻辑的,而不是按位和。
- 1. 为什么我的PowerShell主机在64位机器上以32位运行?
- 2. 为什么32位等于4Giga字节而不是4吉位
- 3. 在64位机器上生成32位
- 4. 为什么valgrind在64位架构上仅限于32 Gb?
- 5. 为什么在32位机器上有2GB redis.io数据库的限制
- 6. '和esp,0xfffffff0'是什么?
- 7. 为什么int 32位?
- 8. 在32位机器上使用48bit
- 9. 为什么32位机器的最大容量是4GB?
- 10. 在64位机器上发生32位整数溢出时会发生什么?
- 11. 为什么在ARM处理器上,PC仍然处于Thumb模式的32位?
- 12. SetupDiCallClassInstaller在64位机器上为32位编译时引发ERROR_IN_WOW64。
- 13. Microsoft建议在64位计算机上安装32位IIS 7 AppPools。为什么?
- 14. 在32位机器上搜索大于4GB的图形
- 15. 在64位机器上处理文件,但在32位机器上开发
- 16. Win 7上安装32位Canopy 32位机器失败
- 17. 为什么1字节等于8位?
- 18. JProfiler GUI在32位机器上连接到64位服务器
- 19. 为什么64位程序文件大于32位?
- 20. 在安装在32位机器上的hyper-v上安装64位虚拟机
- 21. 为什么__sync_add_and_fetch适用于32位系统上的64位变量?
- 22. ASP.NET 32位机器现在编译试图在64位机器上运行
- 23. 如何找出为什么.NET应用程序在64位机器上以32位运行
- 24. 为什么我无法在64位机器上正确读取HKCU中的32位注册表值?
- 25. 为什么D编译的main()在64位机器上有一个32位的返回值?
- 26. 在Windows 7 64位机器上将32位exe转换为64位exe
- 27. 最大RAM 32位机器
- 28. 32或64位机器
- 29. 用于在32位机器上添加两个64位数的汇编宏
- 30. 有什么办法在32位计算机上执行64位程序?
'&&'是逻辑AND,不是按位AND。 〜是一个标准的按位操作。 – chris
我知道做什么,但我认为0xF(即使在32位)将是0x11111111? – sebi
'0xF'是'0x0000000F'。在什么世界将等于'0x11111111'? –