位运算(16位带符号二进制

目录

一、运算符:

1.与 x&y:对应位均为1的时候才为1,否则为0

2.或 x|y:对应位均为0的时候才为0

3.异或^:同0异1

例题:

4.取反 ~x:逆转01位 

5.按左位移x<<1:

6.按右位移x>>1:

二、综合使用:

1.二进制转换

2.毒酒问题


一、运算符:

1.与 x&y:对应位均为1的时候才为1,否则为0

  用途:①测试某一位是0/1:   x&2==2?..........

             ②只保留某些位上的1

             ③把特定位上的数置0

2.或 x|y:对应位均为0的时候才为0

    用途基本同1(没有①;②③把1/0互换就行.

3.异或^:同0异1

    用途:①与全1异或——翻转0和1      与0异或——不变

               ②与自己异或——0

               ③与自己异或两次——不变

               ④互换xy的值:x=x^y;y=y^x(此时y=原来的x;x=x^y(此时x=原来的y。

例题:

解析:将这n个正整数一起异或,相同的就相当于抵消掉了,最后的结果就是那个落单的那个

int n,result=0,x;

cin>>n;

for(int i=0;i<n;++i) 

{cin>>x;

result^=x;

}

cout<<result;

4.取反 ~x:逆转01位 

5.按左位移x<<1

6.按右位移x>>1:

    无符号和有符号的正数:正常移动

   负数:补的数取决于所使用的系统(补0:逻辑右移;补1:算术右移

   这告诉我们:对负数进行位运算的时候,要注意是否要先变成无符号形式(unsigned

   用途:用来与2的n次方进行*/运算,加快效率(*2的n次方:1<<n

二、综合使用:

1.二进制转换

①n&1;n>>1;(从低位到高位即从末尾开始(与二进制码相反)   也可以据此判奇偶  

有多少输出多少个数字  

如果要对n进行位运算,应该是写n>>=1!!!!!气死了你个**

(或者:n&(1<<i[i从15取到0] ) !=0 ;(从高位到低位  16个数字

②cout<<(n<<i[i从15取到1]<0)(顺序由i来决定,如果i从大到小,那就是从高位到低位的顺序,即输出值就是二进制码

(这个不行啊   这个应该是根据符号位来判断01的,但是现在编译器里面好像是32位还是怎么,得到的结果永远都是>0的)

2.毒酒问题

 解析:将酒按二进制编号,一共需要十位(2的十次方-1)

取十只老鼠,让每只老鼠喝对应位上为1的所有酒,最后每一位老鼠都能确定一个位上的数字。(类似于取交集:没死的老鼠证明没有喝到毒酒——毒酒这一位上是0才会没有喝到;死了的老鼠喝到了毒酒——因为这一位上是1所以被喝到了)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
专为程序员打造的计算器,二进制运算强大,支持64。 采用表达式驱动,输入表达式便即时显示结果,抛弃传统计算器繁琐的按钮,表达式可粘贴或回调重复使用。 支持二进制串直接运算,如0b1101 & 0b0011= 0b0001。 支持与、或、非、异或、移(循环、逻辑、算术),直接读写二进制,指定段读、写、置1、清0、反转。 二进制据表达方式多样,据可以K、M、G等单为后缀。 支持类C语言库函调用。 结果可以各种进制、各种单输出。 运算结果可存放在变量中。 内置常用生活函。 总之,此计算器相当于解释执行的C语言表达式,但用起来更方便、更高效。 使用前请仔细阅读窗口内的帮助,便可成为开发工作中的好帮手。 [程序员二进制计算器 v1.36 帮助] 一 用法 在底部框中输入要计算的表达式,会即时显示计算结果,当无结果时说明表达式输入有误。 按回车键保存该次输入、清空输入框,并显示详细结果,包括可能有的错误信息。 在底部框中按键盘上、下箭头,可以调出历史输入。 当光标在结果框内时,按回车或TAB键可使光标跳至输入框。 二 特点 即时计算。 便捷的历史回调、复制、粘贴功能。 支持64整型运算,整有效范围为 -9223372036854775808 至 9223372036854774784。 三 的表示 1-整型表示法 如何表示二、八、十六进制整: (1)二进制 以0b或0B开头,后面的0、1字之间可以用空格分隔。 0b1001 = 9 0b 1001 0110 = 0x96 = 150 0B1001 0110% = 150% = 1.5 (2)八进制 以0开头: 010 = 8 027 + 7 = 23 + 7 = 30 (3)十六进制 以0x或0X开头: 0x10 = 16 -0XabEF * 2 = -44015 * 2 = -88030 2-浮点表示法 (1)小点前后的省略表示 3.14 3. = 3.0 .14 = 0.14 (2)用科学计法表示浮点 3e2 = 300 3e+2 = 300 3e-2 = 0.03 3.e2 = 300 3.e+2 = 300 3.14e-2 = 0.0314 .14e+2 = 14 3-字符型表示法 支持字符常量,字符型自动转换为整型(值为该字符的ASCII码),支持C/C++转义字符。 如何得到字符的ASCII码: 'a' = 97 'A' = 65 'a' + 3 = 100 'a' - 'A' = 32 '\''=39 '\"' = '"' = 34 '\? = '?' = 63 '\\' = 92 '\a' = 7 '\b' = 8 '\f' = 12 '\n' = 10 '\r' = 13 '\t' = 9 '\v' = 11 4-量词后缀表示 一个的后面,可以跟有倍率运算符,表示该乘以相应的倍,例如: 2w = 20000 (2万) 13y = 1300000000 (13亿) 4k = 4096 3% = 0.03 (百分之3) 详见“倍率运算”部分。 三 运算结果的输出格式 1-指定方法 格式: [格式前缀] 表达式 表达式前面可带有“格式前缀”(可选的),用来指定运算结果的输出格式。 “格式前缀”与C/C++的printf函基本相同,但不支持%s或%S。 当省略格式前缀时,默认按%g方式输出。此时对较小的按原样输出,较大的按科学计法输出。 2-整型的输出格式 当按二、八、十六进制输出时,是按其补码形式输出,最高符号(正为0、负为1)。 所以此法可得到一个负的补码表示。 (1)按二进制输出 %b或%B %b等价与%B。 %b 12 = 0b1100 %b 0xffffffff = 0b1111 1111 1111 1111 1111 1111 1111 1111 (2)按八进制输出 %o或%O %o等价与%O。 %o 10 = 012 (3)按十进制输出 %d 对于整型值,默认按十进制输出,此时%d可省略。 %d 123456789 = 123456789 (4)按十六进制输出 %x或%X 用%x时,字母abcdef输出为小写,用%X时,字母abcdef输出为大写。 %x 31 = 0x1f %X 31 = 0X1F (5)输出前的类型转换 对于浮点型值,用以上4种格式时,会先取整,再输出,因此它们可起到对结果取整的作用。 %d 12345.6789 = 12345 %d -12345.6789 = -12345 3-浮点型的输出格式 (1)按精简方式输出 %g %g是默认的输出格式(可省略),此时不输出无意义的0,当较大时自动按科学计法输出。 %g 314 = 314 %g 3.14000 = 3.14 %g 3.14 * 2 = 6.28 %g 1234567 = 1.23457e+006 (2)按全部输出 %f %f输出全部,包括多余的0: %f 3.14 * 2 = 6.280000 (3)如何指定小点后保留 %m.nf 格式:%m.nf 其中,m和n都是整,m指定总,n指定小点后保留几,如果m或n不足,则按实际输出。 例1:指定小点后保留2,其余四舍五入: %.2f 3.14159 = 3.14 例2:指定全部5,且小点后保留3,其余四舍五入: %5.3f 3.14159 = 3.142 4-字符型的输出格式 %c或%C 如何得到ASCII值对应的字符(ASCII值转换为字符): 用%c,使结果(仅支持整型值)按字符形式输出即可。 %c 65 = 'A' %C 100-3 = 'a' 5-智能大小输出格式 用于将一个较大或较小的、不易读的,自动转换为易读的单输出。 (1)以K、M、G、T、P、E为单输出 %sz %sz对结果按1024为单换算,用于快速计算磁盘文件的大小(sz是size的简写): 当结果=1K且=1M且=1G且=1T且=1P且=1E时,以E为单输出,例如: %sz 10000000000000000000 = 8.673617E (2)以W(万)、Y(亿)、WY(万亿)、YY(亿亿)、WYY(万亿亿)、YYY(亿亿亿)为单输出 %num %num对结果以万、亿等为单输出,用于便捷得到一个大的值,格式符合中国人的习惯: 当结果=1万且=1亿且=1万亿且=1亿亿且=1万亿亿且=1亿亿亿时,以亿亿亿为单输出,例如: 围棋盘第1格放1粒米,以后每格放前一格2倍的米,一共需要多少粒米: %num 2**(18*18) = 3.41758e+073YYY (3)以kilo(千)、mil(百万)、bil(十亿)、tril(万亿)为单输出 %val %val对结果按1000为倍率单输出,用于便捷得到一个大的值: 当结果=1千且=1百万且=十亿且=1万亿时,以万亿为单输出,例如: %val 519322y = 51.9322tril (2012年国内生产总值,y是后缀运算符,表示前值乘以1亿) 6-固定比例输出格式 (1)按百分比输出 %2 %2将结果按百分比格式输出,例如: 对150种食品进行抽查,仅105种合格,合格率是多少: %2 105/150 = 70% (2)按万分比输出 %4 %4将结果按万分比格式输出,例如: %4 0.00314 = 31.4%% 四 运算符与函 1-运算符与分类 所有运算符,一律不区分大小写。 (1)一元运算符 只有1个操作的运算符。 如果操作是一个常,它不需要用括号括起,并且与运算符之间不需要空格分隔,如: sqr2 = 1.41421 cos0 = 1 当操作是表达式时,需要用括号括起,以划分优先级: sqr(1 + 2) = 1.73205 当操作是一个内置常量时,它与运算符之间要有空格分隔: cos pi = -1 对少一元运算符,按书写习惯放在了操作的后面,如阶乘!和百分比% 3! = 6 3% = 0.03 (2)二元运算符 需要2个操作的运算符,如+ - * /。 (3)三元运算符 需要3个操作的运算符,如条件运算符 ?: 。 2-内置函 调用格式:函名(参1, 参2, ...) 其中,所有函名不区分大小写。 函名后是用一对括号括起的参列表,各参间用逗号分隔。 每个参可以是一个值,也可以是复杂表达式。 参必须符合该函的定义,部分函支持无穷多个参(sum, ave, max, min)。 整个函调用又是个表达式(值为函的返回值),又可以参与构成其它表达式。 五 基本运算 1-四则运算 (1)加 + 3 + 2 = 5 (2)减 - 3 - 2 = 1 (3)乘 * 3 * 2 = 6 (4)除 / 除不能为0。 3 / 2 = 1.5 (5)求余 mod 除不能为0,支持对浮点求余。 5 mod 3 = 2 5.2 mod 3.1 = 2.1 6.28 mod 1.5 = 0.28 2-等比运算 格式为 a : b = c : ? 整个表达式的值为“使等式成立的问号处”的值。这里冒号的含义等于除号。 例子:商场里100元的衣服,打折后卖75元, 则另一件150元的衣服,同样打折后卖多少? 写出表达式 100:75=150:?,结果为112.5 3-取整 (1)下取整 floor 返回不大于x的最大整: floor2.8 = 2 floor-2.8 = -3 (2)上取整 ceil 返回不小于x的最小整: ceil2.8 = 3 ceil-2.8 = -2 4-求绝对值 abs abs-3.14 = 3.14 abs(3 - 5) = 2 5-求阶乘 ! 操作不能小于0,或大于100。 3! = 6 (3!)! = 6! = 720 6-倍率运算 一个表达式的后面,可以跟有倍率运算符,表示该表达式的值乘以相应的倍。 此法在表示一个大或特定时,可以减少书写量。 (1)存储单后缀运算符 K M G T P E 4k = (480/120)k = 4*1024 = 4096 2m = (2k)k = 2*1024*1024 = 2097152 4g = (2+2)g = 4*1024*1024*1024 = 4294967296 1t = 1024*1024*1024*1024 = 1099511627776 1p = 1024*1024*1024*1024*1024 = 1125899906842624 1e = 1024*1024*1024*1024*1024*1024 = 1152921504606847000 (2)量后缀运算符一 w y wy yy wyy yyy 2w = 20000 (万) 13y = 1300000000 (亿) 1wy = (1w)y = 10000y = 1e+012 (万亿) 1yy = (1y)y = 1e+016 (亿亿) 1wyy = ( (1w) y )y = 1e+020 (万亿亿) 1yyy = ( (1y) y )y = 1e+024 (亿亿亿) (3)量后缀运算符二 kilo mil bil tril 11.034kilo = 11.034 * 1000 = 11034 (千) 1.392mil = 1.392 * 100w = 1392000 (百万) 1.35382bil = 1.35382 * 10y = 1353821000 (十亿) 51.9322tril = 51.9322wy = 5.19322e+013 (万亿) (4)比率后缀运算符 % %% 求百分比 % 3% = 0.03 (500%)% = 5% = 0.05 500% mod 3 = 5 mod 3 = 2 求万分比 %% 12345%% = (12345%)% = 123.45% = 1.2345 7-幂运算、指运算 (1)求平方根 sqr sqr2 = 1.41421 sqr(1 + 2) = 1.73205 (2)求X的Y次方 ** 幂运算,支持浮点: 4 ** 3 = 4 * 4 * 4 = 64 2.5 ** 1.5 = 3.95285 (3)求e的x次方 exp exp1.5 = e ** 1.5 = 4.48169 8-对运算 (1)求以2为底的对 lg lg2 = 1, lg(2 * 2 * 2) = 3 (2)求以10为底的对 ln ln10 = 1 ln(10 * 10) = 2 (3)求以e为底的对 log log e = 1 log(e * e) = 2 9-取负 - -3.14 * -(1+2) = -3.14 * -3 = 9.42 5--3 = 5 - (-3) = 5 + 3 = 8 5--(-3) = 5 - (-(-3)) = 5 - 3 = 2 六 二进制运算 1-与 & 0b1111 & 0b1001 = 15 & 9 = 0b1001 = 9 2-或 | 0b1100 | 0b0011 = 12 | 3 = 0b1111 = 15 3-取反 ~ ~( -2 ) = ~ 0b1111 1111 1111 1111 1111 1111 1111 1110 = 1 (32版本) ~( -2 ) = ~ 0b1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1110 = 1 (64版本) 4-异或 ^ 0b1111 ^ 0b1001 = 15 ^ 9 = 0b0110 = 6 5-移位运算 (1)左移 << 0b0001 << 2 = 1 <> 0b1100 >> 2 = 12 >> 2 = 0b0011 = 3 注:这里是采用逻辑右移还是算术右移,由系统决定。 如果确定做逻辑右移,请用下面的rshl运算符;确定做算术右移,请用下面的rsha运算符。 (3)循环左移 rol 格式:data rol n 功能:返回整型值data循环左移n后的结果。 例子:%x 0x80000000 rol 2 = 0x2 (32版本) %x 0x8000000000000000 rol 2 = 0x2 (64版本) (4)循环右移 ror 格式:data ror n 功能:返回整型值data逻辑循环右移n后的结果。 例子:%x 0xf ror 8 = 0x0f000000 (32版本) %x 0xf ror 8 = 0x0f00000000000000 (64版本) (5)逻辑右移 rshl 格式:data rshl n 功能:无论当前系统采用何种形式的右移,返回整型值data逻辑右移n后的结果。 逻辑右移是指,当右移n时,高n全补0(不考虑符号)。 例子:%x 0xf0000000 rshl 4 = 0x0f000000 (6)算术右移 rsha 格式:data rsha n 功能:无论当前系统采用何种形式的右移,返回整型值data算术右移n后的结果。 算术右移是指,如果符号为1,则右移n时,高n全补1,否则全补0。 例子:%x 0x80000000 rsha 8 = 0xff800000 (32版本) %x 0x70000000 rsha 4 = 0x70000000 (32版本) %x 0x8000000000000000 rsha 8 = 0xff80000000000000 (64版本) %x 0x7000000000000000 rsha 4 = 0x700000000000000 (64版本) 6-二进制运算函 (1)读二进 rb 格式:rb(data, start, length) 功能:对整型值data,从低的start开始(从0开始计),连续取出其高的length的值,返回该值。 例子:%b rb(0b1010 0101, 4, 2) = 0b10 (2)写二进 wb 格式:wb(data, start, length, value) 功能:对整型值data,将其中start开始(从0开始计)、其后连续的的length的值改写为value,返回修改后的data值。 例子:%b wb(0b1010 0000, 4, 4, 0b1111) = 0b1111 0000 (3)指定置1函 setb 格式:setb(data, start, length) 功能:对整型值data,从低的start开始(从0开始计),其后连续的length全部置1,返回修改后的data值。 例子:%x setb(0x0, 8, 16) = 0x00ffff00 (4)指定清0函 rstb 格式:rstb(data, start, length) 功能:对整型值data,从低的start开始(从0开始计),其后连续的length全部置0,返回修改后的data值。 例子:%x rstb(0xffffffff, 8, 16) = 0xff0000ff (5)指定反转函 rvsb 格式:rvsb(data, start, length) 功能:对整型值data,从低的start开始(从0开始计),其后连续的length全部反转,返回修改后的data值。 例子:%x rvsb(0x0, 8, 16) = 0x00ffff00 七 逻辑运算 支持6种关系运算,和3种逻辑运算,以及C/C++条件运算。 当逻辑结果为真时,结果为整型值1;当逻辑结果为假时,结果为整型值0。 1-关系运算 (1)大于 > 1+2 > 3+4 = (1+2) > (3+4) = 0 (2)大于等于 >= 3.14*2 >= 6.28 = 1 (3)小于 < 1+2 < 3+4 = (1+2) < (3+4) = 1 (4)小于等于 <= 3.14*2 <= 6.28 = 1 (5)等于 == 3.14*2 == 6.28 = 1 (6)不等于 != 3.14*2 != 6.28 = 0 2-逻辑运算 (1)逻辑与 && 1<2 && 3<5 = (1<2) && (3<5) = 1 1<2 && 32 || 3>3 = 0 1>2 || 3>=3 = 1 (3)逻辑非 ! !0 = 1 !1 = 0 !(-3.14) = 0 3-条件运算 ? : 格式:表达式1 ? 表达式2 : 表达式3 结果:当表达式1为真时,整个表达式的结果等于表达式2,否则结果等于表达式3。 例子:1+2>3+4 ? 1+2 : 3+4 = 7 sqr(1+2<3+4 ? 1+2 : 3+4) = sqr(1+2) = 1.73205 4-逻辑结果值 逻辑结果值(0或1)又可作为整参与其它运算。 (-3<5) + 2 = 1 + 2 = 3 1<2<3 = (1<2)<3 = 0e ? pi : e (得到常量pi和e中的大者) myave = ave(65, 78, 84.5, 96) (求几个的平均值,myave = 80.875) 对已定义的变量可以再次赋值,这时原值丢失,保存新值。 引用未定义的变量时会报错。 2-赋值表达式 赋值运算本又是个表达式,即赋值表达式。 整个赋值表达式的值,为=号右部表达式的值,例如 a = (b = 5) (此时变量a和b的值都等于5) 采用此法可以一次性定义多个变量。 3-内置的常量 以下内置常量可以直接使用,常量名不区分大小写。 不能对常量重新赋值,否则会报错。 e = 2.718281828459 (自然对的底) gold = 0.61803398874989484820 (黄金分割比率) inch = 2.54 (1英寸等于几厘米) kv = 273.15 (开氏温度 = 摄氏温度 + 273.15) nmi = 1.852 (1海里等于几公里) pi = 3.1415926535898 (圆周率) 十二 运算符的优先级 1-优先级顺序 运算符按优先级划分为如下14组,各个组的优先级由高到低,同一组内的优先级相同。 不清楚优先级时,请用使用括号。 (1) -(取负) !(逻辑非) ~(取反) %(百分比) %%(万分比) !(阶乘) K M G T P E(存储单后缀) w y wy yy wyy yyy kilo mil bil tril(量后缀) id(arg1, arg2, ...)(函调用) (2) abs ceil floor lg ln log exp sqr rtd dtr sin cos tan ctan asin acos atan sinh cosh tanh intcm cmtin nmtkm kmtnm lbtkg kgtlb ftc ctf ktc ctk (3) * / mod(求余) **(幂运算) (4) + - (5) <> rshl rsha rol ror (6) > >= < <= (7) == != (8) & (按与) (9) ^ (按异或) (10) | (按或) (11) && (逻辑与) (12) || (逻辑或) (13) ?: (条件运算) :=:? (等比运算) (14) = (赋值运算) 2-用括号指定运算顺序 1 + 2 * 3 = 1 + (2 * 3) = 7 (1 + 2) * 3 = 9 1 * (2 + 3) = 5 author: huyansoft

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值