【C#】关于左移/右移运算符的使用

吐槽先~为什么我的老师大学时候没教过我这东西  - -、

继续送栗子:

比如 “(1+2)<<3”

你们猜等于几~

Debug.Log((1+2)<<3)之后输出的是“24”。

为什么呢~

因为呀因为呀  “

“左移/右移” 是指对应的二进制向左右移位,执行1+2=3,就变成了3<<3。即:把3对应的二进制向左移3位。

3对应的二进制:11   向左移3位变成 11000

二进制11000不就是十进制的24嘛~~~”

继续拓展一下思维

3>>1<<1 =?  一般人会想呀先向右移又向左移回来,结果肯定是3不会变呀~~~真·图样图森破!

自己算一下就会发现:

一个数向右移动一位后,所对应的二进制最后一位无论是1还是0,都已经没意义了,因为它消失了呀。然后,再向左移动一位,神奇的又增加的那一位又用0补上了。

所以,3变成2进制的“11”向右移动一位变成“1”,再向左移动一位变成了“10”,也就是2。

呵呵鉴于此刻无意间发现的这个惊天大秘密,以后再求小于等于某个数的偶数,就可以这样写嘛~

当然大家也可以继续开脑洞拓展一下,直到玩坏它。

时间: 2024-08-24 06:09:20

【C#】关于左移/右移运算符的使用的相关文章

关于 C/C++左移右移运算符 的总结

一.概述 本文是根据整合网上资料与相关博文总结出来的关于[ C/C++左移右移运算符 ]的知识. 二.正文 (1)结合图示篇,更加简单明了. 移位运算包含“逻辑移位”(logical shift)和“算术移位”(arithmetic shift). 逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充. 算术移位:移出去的位丢弃,空缺位(vacant bit)用“符号位”来填充,所以一般用在右移运算中. c++中,整数分有符号数和无符号数两种,对于这两种数做左移.右移运算,稍有区

按位与,按位或,按位异或,左移右移运算符

按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算. 运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1; 即:两位同时为“1”,结果才为“1”,否则为0 例如:3&5  即 0000 0011 & 0000 0101 = 0000 0001   因此,3&5的值得1. 另,负数按补码形式参加按位与运算. “与运算”的特殊用途: (1)清零.如果想将一个单元清零,即使其全部二进制位为0,只要与一个各

java 左移&lt;&lt;&amp;&gt;&gt;右移&amp;&gt;&gt;无符号右移

java中右移运算符>>和无符号右移运算符>>>的区别 在做一个pcm音频时遇到了这个符,但是我看有些百度的地方的解释都不能令我很懂,所以就整理下. 首先左移和右移的区别是很好区分的 左移<< :就是该数对应二进制码整体左移,左边超出的部分舍弃,右边补零.举个例子:253的二进制码1111 1101,在经过运算253<<2后得到1111 0100.很简单 右移>> :该数对应的二进制码整体右移,左边的用原有标志位补充,右边超出的部分舍弃.

jQuery实现左移右移

1 <html> 2 <head> 3 <meta charset="utf-8"> 4 <title>完成左移右移</title> 5 <script src="jquery.js"></script> 6 <style type="text/css"> 7 table{background-color:purple;} 8 input{backgr

EASYUI- EASYUI左移右移 GRID中值

EASYUI左移右移 GRID中值 $("#addAll").click(function(){ var ids = []; var names = []; var srcrows = $('#sourceTable').datagrid('getSelections'); if(srcrows.length == 0 ){ Sys.InfoShow("请选择要移动的记录!"); return; } var id;var name; for(var srci=src

嵌入式C开发---用循环实现左移右移

//将n左移m位 int byte_to_left_move(int n , int m) { int i , ret = 1 ; if(n == 0 || n < 0) { return ; } if(n == 1) { for(i = 0 ; i < m ; i++) ret *= n * 2 ; } if(n > 1) { for(i = 0 ; i < m ; i++) ret *= n ; } return ret ; } //将n右移m位 int byte_to_rig

Java右移运算符&gt;&gt;和&gt;&gt;&gt;

java提供两种右移运算符,属于位运算符.位运算符用来对二进制位进行操作. >>  :算术右移运算符,也称带符号右移.用最高位填充移位后左侧的空位. >>>:逻辑右移运算符,也称无符号右移.只对位进行操作,用0填充左侧的空位. 表达式为: r = e1 >> e2; r = e1 >>> e2; 表示把数e1向右移动e2位. 运算规则: >>  :按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补符号位,即正数补

左移右移(转)

先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如: int i = 1;i = i << 2;  //把i里的值左移2位需要注意的一个问题是int类型最左端的符号位和移位移出去的情况.我们知道,int是有符号的整形数,最左端的1位是符号位,即0正1负,那么移位的时候就会出现溢出,例如: int i = 0x40000000; //16进制的40000000,为2进制的01000000...0000i = i << 1; 那么,i在左移1位之后

友元函数实现操作符重载的应用场景-友元函数实现左移右移操作符重载

先定义一个测试类Complex,其中用成员函数的方法重载了+.-.前置++.前置--.后置++.后置--这6个运算符,当然,这6个操作符也可以用友元函数方式重载,但习惯上这些都直接用成员函数方式重载. demo #include <iostream> using namespace std; class Complex { public: Complex(int a = 0, int b = 0) { this->a = a; this->b = b; } ~Complex();