取反: 在二进制中第一位,1表示符数,0表示正数 byte a = -1; 原码:10000001 反码:11111110 补码:11111111 //异或: 00000000 byte b = -2; 原码:10000010 反码:11111101 补码:11111110 //异或: 00000001 byte c = 3; // 10000101 System.out.println(~a); System.out.println(~b); System.out.println(~c);
运算结果: 0 1 -4
右移:正数右移.负数右移 ,无符号右移
右移的符号是:>>
无符号右移的符号的:>>>
在左右位移时应注意,位移是否超过了数据的长度,如果超过了就会进行取摸运算等:下面的代码中有测试到
//右移: //右移一个正数,右移一个整数每次在左边补0 int a = 5; System.out.println(a>>1); //原码; 0000000101 //右移一位: 0000000010 System.out.println(a>>2); //原码; 0000000101 //右移两位: 0000000001 System.out.println(a>>3); //原码; 0000000101 //右移三位: 0000000000 System.out.println(a>>31); //原码; 0000000101 //右移32位: 0000000000 System.out.println(a>>32); //int 为32位,当位移等于32时,相当于没有移动,会进行取摸运算 System.out.println(a>>34); //位移大于32时,进行取摸运算 34%32 = 2 //此时相当于位移两位 System.out.println(a>>>1); //无符号右移最高位补0 // 原码: 0000000101 //无符号右移 : 0000000010 2
运算结果: 2 1 0 0 5 1 2
负数右移:
//右移一个负数,右移一个整数每次在左边补1 //位移负数,应先将其装换成补码形式,再位移 int a = -5; //原码:100000101 //反码:111111010 反码是和原码的数相反 第一位相同(符号位) //补码:111111011 补码在反码后面加1 System.out.println(a>>1); //补码:111111011 //补码右移一位: 111111101 -3 System.out.println(a>>2); //补码:111111011 //补码右移两位: 111111110 -2 System.out.println(a>>3); //补码:111111011 //补码右移三位: 111111111 -1 System.out.println(a>>4); //补码:111111011 //补码右移四位: 111111111 -1 System.out.println(a>>31); //补码:111111011 //补码右移31位: 111111111 -1 System.out.println(a>>32); //int为32 位的数,在位移时,等于没有移动 -5 System.out.println(a>>34); //int 为32位的,位移34会进行取摸运算 34%32 =2 -2 System.out.println(a>>>1); //无符号负数的右移在最高位补1; //补码:111111011 //无符号右移1位:011111101 此时负数将变成一个正数
-3 -2 -1 -1 -1 -5 -2 2147483645
左移:
左移的符号:<<
左移无符号的正负数的符号:<<<
左移的右边补0
//左移正数 int a = 5; //补码:00000101 System.out.println(a<<1); //00001010 10 System.out.println(a<<2); //00010100 20 System.out.println(a<<31); //为一个负数,左移应注意
运算结果: 10 20 -2147483648
左移负数:
左移都是右边补0
int a = -5; //补码:11111011 System.out.println(a<<1); //左移一位:11110110 -10 System.out.println(a<<2); //左移两位:11101100 -20 System.out.println(a<<31); //左移31会出现问题 System.out.println(a<<34); //相当于左移两位 //左移两位:11101100 -20
运算结果: -10 -20 -2147483648 -20
使用位移来求二进制的问题:
public static void main(String[] args) { //通过右移将十进制的数转换成二进制 int a = 100; for(int i =31;i>0;i--){ System.out.print(a>>i&1); } }
运算结果: 0000000000000000000000000110010
相关推荐
单片机C语言实例--13-双灯左移右移闪烁.zip
单片机C语言实例--10-LED循环左移.zip
13-双灯左移右移闪烁(51单片机C语言实例Proteus仿真和代码)13-双灯左移右移闪烁(51单片机C语言实例Proteus仿真和代码)13-双灯左移右移闪烁(51单片机C语言实例Proteus仿真和代码)13-双灯左移右移闪烁(51单片机C语言...
38-数码管右移(51单片机C语言实例Proteus仿真和代码)38-数码管右移(51单片机C语言实例Proteus仿真和代码)38-数码管右移(51单片机C语言实例Proteus仿真和代码)38-数码管右移(51单片机C语言实例Proteus仿真和代码)38-...
38-数码管右移1(51单片机C语言实例Proteus仿真和代码)38-数码管右移1(51单片机C语言实例Proteus仿真和代码)38-数码管右移1(51单片机C语言实例Proteus仿真和代码)38-数码管右移1(51单片机C语言实例Proteus仿真和代码)...
39-数码管右移2(51单片机C语言实例Proteus仿真和代码)39-数码管右移2(51单片机C语言实例Proteus仿真和代码)39-数码管右移2(51单片机C语言实例Proteus仿真和代码)39-数码管右移2(51单片机C语言实例Proteus仿真和代码)...
为您提供易语言左移右移源码下载,易语言左移右移源码系统结构:右移_,左移_,十进制转换十六进制,十六进制转换十进制,去除首部零, ======窗口程序集1 | | | |------ __启动窗口_创建完毕 | | | |------ 右移_ | | | |...
C语言位运算符与或异或取反左移和右移.pdf
易语言左移右移源码.rar 易语言左移右移源码.rar 易语言左移右移源码.rar 易语言左移右移源码.rar 易语言左移右移源码.rar 易语言左移右移源码.rar
易语言左移右移口算公式源码,左移右移口算公式,左移_子程序,右移_子程序
285-用右移运算流水点亮P1口8位LED(51单片机C语言实例Proteus仿真和代码)285-用右移运算流水点亮P1口8位LED(51单片机C语言实例Proteus仿真和代码)285-用右移运算流水点亮P1口8位LED(51单片机C语言实例Proteus仿真和...
主要介绍了Java 无符号右移与右移运算符的使用介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
java 二进制,位左移,位右移PPT java 二进制,位左移,位右移 java 二进制,位左移,位右移
单片机C语言实例-双灯左移右移闪烁.zip
C语言位运算符:与、或、异或、取反、左移和右移.docx
41-数码管循环右移(51单片机C语言实例Proteus仿真和代码)41-数码管循环右移(51单片机C语言实例Proteus仿真和代码)41-数码管循环右移(51单片机C语言实例Proteus仿真和代码)41-数码管循环右移(51单片机C语言实例...
11-LED循环右移(51单片机C语言实例Proteus仿真和代码)11-LED循环右移(51单片机C语言实例Proteus仿真和代码)11-LED循环右移(51单片机C语言实例Proteus仿真和代码)11-LED循环右移(51单片机C语言实例Proteus仿真和代码)...
42-数码管循环右移2(51单片机C语言实例Proteus仿真和代码)42-数码管循环右移2(51单片机C语言实例Proteus仿真和代码)42-数码管循环右移2(51单片机C语言实例Proteus仿真和代码)42-数码管循环右移2(51单片机C语言实例...
41-数码管循环右移1(51单片机C语言实例Proteus仿真和代码)41-数码管循环右移1(51单片机C语言实例Proteus仿真和代码)41-数码管循环右移1(51单片机C语言实例Proteus仿真和代码)41-数码管循环右移1(51单片机C语言实例...
vb中对字节变量进行位操作的函数 包括左移、右移、置位、复位、位判断操作