首页 > 代码库 > NOJ---页面无法显示--位运算

NOJ---页面无法显示--位运算

好吧 先解决下 -- 页面无法显示

该死的Oj 不知道为什么突然无法打开了 =-= 我也就忘记题号了

主要现在这场乌拉圭-哥伦比亚 刚开始  忙里偷闲 把这题来写了

明天 不对 应该是今天 不知道要睡到什么时候 =-=

 

先来贴下关于位运算的操作要求及解释--------我好像上次贴过 我忘记了 orz

位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作

运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。
C语言提供的位运算符列表:
运算符 含义 描述
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<< 左移 用来将一个数的各二进制位全部左移N位,右补0
>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

// 感觉 紫色 最显眼啊

 

题目链接我暂时不能给出了 = 我明天睡醒 会补上

 1 #include <iostream> 2 using namespace std; 3  4 int main()  5 { 6     unsigned long long num; // 这边使用unsigned long long 可以满足题目的数据要求  7     while (cin >> num)  8     { 9         int len = 0;10         unsigned long long temp = num;11         while (temp) // 求出将 num -> 转成2进制数后的序列长度 如5->101 即 len = 3 12         {13             temp>>= 1;14             len++;15         }16         temp = num;17         for (int i = 0; i < len; i++) 18         {19             cout << temp;20             if (temp & (1LL << (len - 1)) ) //这里的( 1LL <<(len-1) )就是从同样长度的二进制序列高位到低位为1开始枚举 21             { // 如果&成功 那么代表num的二进制序列的最左边(即最高位)是1 那么通过下面的操作就将1给移到了最后 22                 temp = ( (temp ^ (1LL << (len - 1)) ) << 1 ) | 1;23             } //主要是利用了 ^ 的性质 和 << 将二进制的数全左移并且低位用0补齐 然后与1 | 那么就是1了 24             else 25             {26                 temp = temp << 1;//进入到这里 说明最左位是0 那么直接<< 27             }28             if (i < len - 1) 29             {30                 cout << " ";31             }32             else 33             {34                 cout << endl;35             }36         }37     }38     return 0;39 }
View Code


最近 喜欢直接用c++ 的cin cout来写 流畅=-=  至于会不会tle的话 天意 不行 再改为 scanf printf吧

 

today:

  我来年陌生的是昨日最亲的某某

  最熟悉的陌生人