pho*_*cao 5 c c++ architecture bit-manipulation bit
我试图找到一些书或资源详细讨论比特,以便例如我能够将数字(如16)转换成比特.我目前是一名高中生,每当阅读编程书籍时,我几乎可以理解除了位/位运算符部分之外的所有内容.我只是不知道它是如何工作的,为什么人们甚至发明了bit&byte :(.因此,我希望你们能给我一些资源建议,谈论如何将数字/字符翻译成位.
感谢您回答我的问题并度过美好的一天!
您的问题与编码或任何特定的编程语言无关,但更多的是数学,特别是代数和数字系统.然后下一阶段将是处理器x86架构的基础知识,而不是你可以去编程语言.
顺便说一句:通常有关x86病毒的书籍是了解CPU工作方式的良好开端,但如果没有理解base-2和base-16系统,你就不会从中获得太多.
http://en.wikiversity.org/wiki/Bitwise_operators
http://en.wikipedia.org/wiki/Binary_numbers
一旦你学会了如何用基数2(二进制或"位")表示数字,按位运算符很容易理解.
我只举一些简单的例子:
设m = 31532 = 111101100101100,n = 12325 = 11000000100101.
那么n&m(按位AND - 二元运算符)的结果是:
(如果n(i)和m(i)都是1,那么结果是1,0否则)
111101100101100
011000000100101
===============
011000000100100
Run Code Online (Sandbox Code Playgroud)
n |的结果 m(按位OR - 二元运算符)是:
(如果n(i)和m(i)为0,则结果为0,否则为1)
111101100101100
011000000100101
===============
111101100101101
Run Code Online (Sandbox Code Playgroud)
n ^ m(按位eXclusive OR - 二元运算符)的结果是:
(如果n(i)和m(i)是1,但不是两个,那么结果是1,0否则)
111101100101100
011000000100101
===============
100101100001001
Run Code Online (Sandbox Code Playgroud)
~n(按位非一元运算符)的结果是:
(如果n(i)= 1则结果为0,否则为1)
111101100101100
===============
000010011010011
Run Code Online (Sandbox Code Playgroud)
令k = 3,n >> k(按位右移)的结果为:
111101100101100
===============
000111101100101
Run Code Online (Sandbox Code Playgroud)
他们只是向右转k = 3次.这有效地将数字除以2 ^ k = 8.它通常被编译器用作优化.
相反,令k = 3,n << k(按位左移)的结果为
111101100101100
===============
101100101100000
Run Code Online (Sandbox Code Playgroud)
他们只是向左转k = 3次.这有效地将数字乘以2 ^ k = 8.这里要注意的一件事是因为32位整数只能容纳2 ^ 32-1,所以有一个算术溢出,即较高的k位被切断.
你必须仔细看看这些并找出这些模式.
它们在编程中很重要,因为它们通常用于设置/清除标志值.
因为int32有32个二进制数字,所以它最多可以包含32种不同的布尔标志(0表示false,或1表示true)
我认为这是关于它的.它们非常直观.
| 归档时间: |
|
| 查看次数: |
444 次 |
| 最近记录: |