1、取出一个字节(byte)中的每一位(bit)

转载自: https://blog.csdn.net/qq_21794823/article/details/53517628?locationNum=6&fps=1

byte byData = 0x36; int n0, n1, n2, n3, n4, n5, n6, n7; n0 = (byData & 0x01) == 0x01 ? 1 : 0; n1 = (byData & 0x02) == 0x02 ? 1 : 0; n2 = (byData & 0x04) == 0x04 ? 1 : 0; n3 = (byData & 0x08) == 0x08 ? 1 : 0; n4 = (byData & 0x10) == 0x10 ? 1 : 0; n5 = (byData & 0x20) == 0x20 ? 1 : 0; n6 = (byData & 0x40) == 0x40 ? 1 : 0; n7 = (byData & 0x80) == 0x80 ? 1 : 0;

2、如何获取byte的各个bit值以及常见位操作

转载自: https://blog.csdn.net/dlf1769/article/details/78918152

1、分离出一个Byte的各个Bit的值

一个英文字符占一个字节(1字母=1 byte=8 bit),一个汉字占两个字节(1汉字=2 byte=16 bit)。

其中,bit: 位,一个二进制数据0或1,是1bit。

byte:字节,存储空间的基本计量单位,1 byte=8 bit。

byte:1个字节(8位) (-128~127)  (-2^7~2^7-1)

short:2个字节(16位) (-32768~32767)  (-2^15~2^15-1)

int:4个字节(32位) (-2147483648~2147483647)  (-2^31~2^31-1)

long:8个字节(64位) (9223372036854774808~9223372036854774807)  (-2^63~2^63-1)

float:4个字节(32位) (3.402823e+38~1.401298e-45)  (e+是乘以10的38次方,e-45是乘以10 的负45次方)

double:8个字节(64位) (1.797693e~4.9000000e-324)

(1)byte-->bit

public class T {  
     * 将byte转换为一个长度为8的byte数组,数组每个值代表bit 
    public static byte[] getBooleanArray(byte b) {  
        byte[] array = new byte[8];  
        for (int i = 7; i >= 0; i--) {  
            array[i] = (byte)(b & 1);  
            b = (byte) (b >> 1);  
        return array;  
     * 把byte转为字符串的bit 
    public static String byteToBit(byte b) {  
        return ""  
                + (byte) ((b >> 7) & 0x1) + (byte) ((b >> 6) & 0x1)  
                + (byte) ((b >> 5) & 0x1) + (byte) ((b >> 4) & 0x1)  
                + (byte) ((b >> 3) & 0x1) + (byte) ((b >> 2) & 0x1)  
                + (byte) ((b >> 1) & 0x1) + (byte) ((b >> 0) & 0x1);  
    public static void main(String[] args) {  
        byte b = 0x35; // 0011 0101  
        // 输出 [0, 0, 1, 1, 0, 1, 0, 1]  
        System.out.println(Arrays.toString(getBooleanArray(b)));  
        // 输出 00110101  
        System.out.println(byteToBit(b));  
        // JDK自带的方法,会忽略前面的 0  
        System.out.println(Integer.toBinaryString(0x35));  

(2)bit-->byte

* 二进制字符串转byte public static byte decodeBinaryString(String byteStr) { int re, len; if (null == byteStr) { return 0; len = byteStr.length(); if (len != 4 && len != 8) { return 0; if (len == 8) {// 8 bit处理 if (byteStr.charAt(0) == '0') {// 正数 re = Integer.parseInt(byteStr, 2); } else {// 负数 re = Integer.parseInt(byteStr, 2) - 256; } else {// 4 bit处理 re = Integer.parseInt(byteStr, 2); return (byte) re;

2、左移和右移

直接举例说明:

(1)左移:3左移2位

  |0000 0000  0000 0000  0000 0000  0000 0011

  00|0000 0000  0000 0000  0000 0000  0000 1100   空位补0

3<<1=6;3<<2=12;3<<3=24;

由此可看出一个规律:

3x2^1=6;3x2^2=12;3x2^3=24;

(2)右移:6右移2位

        0000 0000  0000 0000  0000 0000  0000 0110|

        0000 0000  0000 0000  0000 0000  0000 0001|10  

空位补0(看最高位,这里最高位为0),负数最高位为1,补1。

总结:<<左移:就是乘以2的移动的位数次幂。

    >>右移:就是除以2的移动的位数次幂。

    >>:最高位补什么由原有数据的最高位值而定,补0或1。

    >>>无符号右移:无论最高位是什么,右移后都补0。

3、与(&)、或(|)、异或(^)

直接举例说明:

(1)6&3=2;

   110             1代表真,0代表假

     010=2

(2)6|5=7;

    |   101   

        111=7

(3) 6^5=3;

     ^   101    

          011=3

    再举一个例子: 7^4^4=7;  (一个数异或同一个数两次,结果还是那个数,可以用来数据加密)

     ^   100    

     ^   100    

          111=7

1、取出一个字节(byte)中的每一位(bit)转载自:https://blog.csdn.net/qq_21794823/article/details/53517628?locationNum=6&amp;amp;fps=1例: byte byData = 0x36; int n0, n1, n2, n3, n4, n5, n6, n7;n0 = (byData &amp;amp; 0x0... 按位与运算符(&amp;) 参加运算的两个数据,按二进制位进行“与”运算。 运算规则:0&amp;0=0;   0&amp;1=0;    1&amp;0=0;     1&amp;1=1;        即:两位同时为“1”,结果才为“1”,否则为0 例如:3&amp;5  即 0000 0011 &amp; 0000 0101 = 0000 0001   因此,3&amp;5的值得... public: BitsManager(); //指定某一位为1 位编号[0~31] static quint32 setBit1(quint32 value,int bitNum); //指定某一位为0 位编号[0~31] static quint32 setBit0(quint32 v...
背景:对于经常跟底层打交道的嵌入式engineer来说,位操作工具是少不了的,以前经常是用别人写好的,其实这样在实际工作中不太方便,我们可以把自己经常用的工具,集成到一个工具中,这样省时省力。 具体实现效果如下:点击下面的checkbox或者改变Data中的数字,Data或者CheckBox的状态都会随着改变。 x()、y()和pos()函数的作用都是获得整个窗体左上角的坐标位置。 frameGeometry()与geometry()相对应。frameGeometry()是获得整个窗体的左上顶点和长、宽值,而geometry()函数获得的是窗体内中央区域的左上顶点坐标及长、宽值。 直接调用width()和height()函数获得的是中央区域的长、宽值。 rect()、size()函数...
Qt QTableWidget及基本操作(详解版) < Qt QTreeWidget和QDockWidgetQt Model/View结构 > C语言中文网推出辅导班啦,包括「C语言辅导班、C++辅导班、算法/数据结构辅导班」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践 + 永久学习。QQ在线,随时响应! QTableWidget 是 Qt 中的表格组件...