中国象棋将帅问题; 伟大的位运算; 终于开窍了。。。
来源:互联网 发布:淘宝上的内衣模特 编辑:程序博客网 时间:2024/06/10 01:28
由于想存储两个大于1小于9 的整数,1-9的范围很小,用4位存储一个大于1小于9的数,由于4位共有24个数,即能表示0-15这些整数,足够存储1-9,所以我们用两个4位,即8位存储2个1-9的整数,高4位存储一个,低4位存储一个。 由于要避免最高位符号位的影响,必须用unsigned 型变量, 否则移位操作就不是逻辑移位补0,而是补符号位,这样就不和谐了. 由于我们只要8位无符号变量,所以用unsigned char,正好是8位,足够用了.
例如: 0011 0100 , 高4位表示整数 3,低4位表示整数4. 用位来记录整数就是这么个含义...
那么怎么分别取出两个整数,怎么设置两个整数呢?
就是通过位运算符^,&,|,~ ,这些位操作符进行运算. 具体到这里怎么办呢?
1.我们想取高位的整数3 , 取的意思是把高4位移到一个8位变量的低4位,并让高4位为0,这样直接打印这个8位变量就是整数3了.
看上边的例子: 我们想取0011(等于3), 那么就是把0011 0100 这个二进制串向右移位4次,得到 0000 0011, 这时候打印整个
二进制串就显示了3,是我们想要的整数..
2.我们想设置高位的整数为8,设置的意思就是把0011 0100 的高4位改成表示8的二进制数,而低4位仍为原来表示4的二进制数。
所以,可以先把0011 0100 的高4位全变成0 ,这个操作可以让0011 0100 & 0000 1111= 0000 0100,
然后把整数8的二进制串0000 1000 << 4 ,变成了1000 0000, 然后1000 0000 | 0000 0100= 1000 0100。
现在1000 0100高4位表示8, 低4位还是原来的4. 已经完成了修改. 如果我们现在想取高4位的数是多少,又可以照第1部做,再说一遍:
1000 0100 >> 4 = 0000 1000,现在0000 1000就是表示8的一个整数了.
当然,想打印高4位表示的数字8,必须(int)强制转换,否则系统按照unsigned char ,即字符打印,而不是我们想要的数字8.。。
unsigned char num=8; -->二进制 : 0000 1000
unsinged char num1=5; --->二进制: 0000 0101
num&num1= 0; --->二进制: 0000 0000
num<<4=128. 二进制: 1000 0000
即,数字的位运算是对应于二进制的......不要认为二进制运算就一定要写出0000111111这些东西来运算..
- 中国象棋将帅问题; 伟大的位运算; 终于开窍了。。。
- 中国象棋的将帅问题
- 中国象棋的将帅问题
- 中国象棋的将帅问题
- 中国象棋将帅问题与位域
- "中国象棋将帅问题"的一种解法
- 中国象棋将帅问题的另类解法
- 中国象棋将帅问题
- 中国象棋将帅问题
- 中国象棋将帅问题
- 中国象棋将帅问题
- 中国象棋将帅问题
- 中国象棋将帅问题
- 中国象棋将帅问题
- 中国象棋将帅问题
- 1.中国象棋将帅问题
- 中国象棋之将帅问题
- 中国象棋将帅问题
- 关于C#的Foreach
- 男人应该知道的能让女人喜欢你的告白
- vc++6.0编译出错解决方法---"No such file or directory "
- Linux Shell Scripting Tutorial
- 可以在我工作使用的sourceforge优秀项目
- 中国象棋将帅问题; 伟大的位运算; 终于开窍了。。。
- 程序员不要一辈子靠技术混饭吃
- 掌上百度
- 4.2.2 更新detached对象的持久化状态
- 等待
- vs2005的MSDN的下载
- 认识_getcwd和SetCurrentDirectory
- C++ 语言特性的性能分析
- OpenGL坐标变换