首页 > 其他分享 >位运算

位运算

时间:2023-12-03 11:45:27浏览次数:16  
标签:右移 运算 符号 左移 补码 按位

位运算基本分为六种(按位与、按位或、按位异或、按位取反、左移和右移)

位运算会把数字转化为二进制,码数不同的则在前面补0直到码数相同,(eg:14-1110,6-110,补码6-0110)之后按照每一位进行比较

位运算速度快

 

 一:按位与、按位或、按位异或

   按位与 :与数字系统的与门类似,只有两个对应的都为1才是1其余为0,计算机符号为&

   按位或:只要两个对应位中有一个1时就为1,相当于只有两个都为0才为0,计算机符号| 

   按位异或:只有两个对应位不同才为1,相同为0,计算机符号为^

***在进行逻辑运算的时候应当用两个&&,||注意区分。Java中if循环用一个&或一个|不会报错当作逻辑符号进行使用但&|也有按位运算

二:取反(符号~)

运算符为 ~,作用是把数字的二进制补码中的0和1全部取反(0变为1,1变为0

补码:非负数的补码为其本身,负数的补码为取反后加上1(数字系统中2'complement system的用法)

三:左移和右移

num << i 表示将num的二进制表示向左移动  位所得的值。

num >> i 表示将num的二进制表示向右移动  位所得的值。

   eg:3<<3==24     <<代表左移,>>代表右移,左移右移符号右边接的数字即为2的多少次方,3则为2的三次方

     3<<2==12     左移类似与乘,右移类似于除(除相当于int类型的\,不看余数只看商)  

     11>>2==2

     12>>2==3

移位运算中如果出现如下情况,其行为未定义:

  1. 右操作数(即移位数)为负值;
  2. 右操作数大于等于左操作数的位数;
  3. 对于左移操作,需要确保移位后的结果能被原数的类型容纳,否则行为也是未定义的。对一个负数执行左移操作也未定义。
  4. 对于右移操作,右侧多余的位将会被舍弃,而左侧较为复杂:对于无符号数,会在左侧补 ;而对于有符号数,则会用最高位的数(其实就是符号位,非负数为 ,负数为 )补齐。

 

标签:右移,运算,符号,左移,补码,按位
From: https://www.cnblogs.com/sixsix666/p/17872749.html

相关文章

  • C语言-运算符和分支循环语句
    extern: 表示声明。没有内存空间。不能提升。const: 限定一个变量为只读变量。volatile: 防止编译器优化代码。 volatileintflg=0;register: 定义一个寄存器变量。没有内存地址。 registerinta=10; 字符串: C语言中,用双引号引着的一串字符,称之为字符串。一定有一个......
  • 运算符
    运算符算数运算符:+,-,*,/,%,++,--packageoperator;​publicclassDemo02{  publicstaticvoidmain(String[]args){    //有long为long,无long为int​    longa=123123123123L;    intb=123;    shortc=10;    byted=8;​ ......
  • 无涯教程-Erlang - 运算符
    Erlang具有以下类型的运算符-算术运算符关系运算符逻辑运算符按位运算符算术运算符Erlang语言支持普通的算术运算符,就像任何一种语言一样,以下是Erlang中可用的算术运算符。运算符描述示例+加1+2=3-减1-2=-1*乘2*2=4/除2/2=1rem余数3rem2=1div......
  • 位运算符-C语言-2023/12/2
    不全面......
  • 【运算符和表达式】关系运算符 -C语言-2023/11/29
    //比较后会返回两种结果:用数字0意思为“假”,用数字1意思为“真”。这里强调”意思为“。比如:我写个6>8<9这样一个式子结果显示1意思为真因为这里计算机先执行6>8结果为0,变为0之后再执行0<9变为1意思为真. ......
  • 逻辑运算符-C语言-2023/12/2
    ......
  • 进制转换与位运算
    进制12个物品被称为1打,12打被称为1罗,12罗被称为1格。请问:15个是几打几个?6775个是几格几罗几打?2打3个是多少个?1格9罗8打10个是多少个?以上的“几”均是不小于0且小于12的整数分析根据15÷12=1···3,15个除以每打是几个,就是几打,剩下的就是几......
  • 各类运算符的小结
    packageoperator;publicclassdemo01{publicstaticvoidmain(String[]args){inta=111;intb=1213;intc=1131;System.out.println((a+b+c)*a);System.out.println(a/(double)b);doubled=11111;doublee......
  • Java 基础语法:语法、变量与运算
    第一章:Java入门第二章:基础语法、变量一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴......
  • SQL 算术运算符:加法、减法、乘法、除法和取模的用法
    SQLServer中的存储过程什么是存储过程?存储过程是一段预先编写好的SQL代码,可以保存在数据库中以供反复使用。它允许将一系列SQL语句组合成一个逻辑单元,并为其分配一个名称,以便在需要时调用执行。存储过程可以接受参数,使其更加灵活和通用。存储过程语法创建存储过程的语法如......