-
【计算机基础-二进制位运算】
位运算的基础是使用数值的补码进行计算。
一、与(&)
- 按位与;
- 参与运算的两个数对应的二进制位相与,只有对应的二进制位均为1时,结果的对应为才为1,否则为0;
9&5相当于00001001&00000101,运算结果为00000001.输出结果是1。9&-5相当于00001001&11111011,运算结果为00001001.输出结果是9。
二、或(|)
- 按位或;
- 把参数运算的两个数对应的二进制位相或,只要对应的两个二进制位有一个为1时,其结果就为1;
9|5相当于00001001|00000101,运算结果为00001101.输出结果是13。9|-5相当于00001001|11111011,运算结果为11111011.负数要还原原码10000101,输出结果是-5。
三、按位异或(^)
- 按位异或;
- 把参数运算的两个数对应的二进制位相异或,对应位上的两个二进制数字不同时,结果为1,否则为0;
- 任何数和 00 做异或运算,结果仍然是原来的数;
- 任何数和其自身做异或运算,结果是 0;
- 异或运算满足交换律和结合律;
9^5相当于00001001^00000101,运算结果为00001100.输出结果是12。9^-5相当于00001001^11111011,运算结果为11110010.负数要还原原码10001110,输出结果是-14。
四、取反(~)
- 按位异或;
- 把参数运算的两个数对应的二进制位相异或,对应位上的两个二进制数字不同时,结果为1,否则为0
~5相当于~00000101,运算结果为11111010.负数要还原原码10000110.输出结果是-6。~-5相当于~11111011,运算结果为00000100,输出结果是4。
五、左移(<<)
- 左移;
- m<<n是指把m对应的二进制数的各个二进制位向左移n位,高位丢弃,低位用0补齐;
3<<3相当于00000011左移三位,运算结果为00011000.输出结果是24。-3<<3相当于11111101左移三位,运算结果为11101000,原码为10011000输出结果是-24。
六、右移(>>)
- 右移;
- m>>n是指把m对应的二进制数的各个二进制位向右移n位,低位丢弃,高位根据符号,正数用0补齐;负数用1补齐。
3>>1相当于00000011右移一位,运算结果为00000001.输出结果是1。-3>>1相当于11111101右移三位,运算结果为11111111,原码为10000001输出结果是-1。
七、无符号右移(>>>)
- 无符号右移;
- m>>>n是指把m对应的二进制数的各二进制位向右移n位,低位丢弃,高位用0补齐。。
3>>>1相当于00000011右移一位,运算结果为00000001.输出结果是1。负数无符号右移会变成正值,- 按照32位int计算-3>>>3得到结果11111111 11111111 11111111 11111101转为00011111 11111111 11111111 11111111
-
相关阅读:
代码坏味道(一)
【Rust日报】2022-06-22 Rust 连续第 7 年成为最受喜爱的语言
学Golang,看这一篇
将一个字符串str的内容颠倒(逆序)过来,并输出
python工具方法 45 基于ffmpeg以面向对象多线程的方式实现实时推流
从源码看vue(v3.2.41)中的diff原理
企业子网划分详解
联邦学习综述
战备器材管理系统-部队物资仓库管理系统
【Openxml】颜色变化属性计算
-
原文地址:https://blog.csdn.net/qq_43479628/article/details/125618537