日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

获取一个 Byte 的各个 Bit 值

發(fā)布時(shí)間:2023/12/3 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 获取一个 Byte 的各个 Bit 值 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自? ?獲取一個(gè) Byte 的各個(gè) Bit 值

1. bit:位
??? 一個(gè)二進(jìn)制數(shù)據(jù)0或1,是1bit;
2. byte:字節(jié)
??? 存儲(chǔ)空間的基本計(jì)量單位,如:MySQL中定義 VARCHAR(45)? 即是指 45個(gè)字節(jié);
??? 1 byte = 8 bit
3. 一個(gè)英文字符占一個(gè)字節(jié);
??? 1 字母 = 1 byte = 8 bit
4. 一個(gè)漢字占2個(gè)字節(jié);
??? 1 漢字 = 2 byte = 16 bit
byte:一個(gè)字節(jié)(8位)(-128~127)(-2的7次方到2的7次方-1)
short:兩個(gè)字節(jié)(16位)(-32768~32767)(-2的15次方到2的15次方-1)
int:四個(gè)字節(jié)(32位)(一個(gè)字長(zhǎng))(-2147483648~2147483647)(-2的31次方到2的31次方-1)
long:八個(gè)字節(jié)(64位)(-9223372036854774808~9223372036854774807)(-2的63次方到2的63次方-1)
float:四個(gè)字節(jié)(32位)(3.402823e+38 ~ 1.401298e-45)(e+38是乘以10的38次方,e-45是乘以10的負(fù)45次方)
double:八個(gè)字節(jié)(64位)(1.797693e+308~ 4.9000000e-324

?

Java中數(shù)據(jù)流的操作很多都是到byte的,但是在許多底層操作中是需要根據(jù)一個(gè)byte中的bit來(lái)做判斷!

Java中要根據(jù)byte獲得bit就要進(jìn)行一些位操作,不過(guò)為了使用我直接給出解決方案,至于位操作的一些內(nèi)容,回頭再說(shuō)!

  • package?com.test;??
  • import?java.util.Arrays;??
  • public?class?T?{??
  • ????/**?
  • ?????*?將byte轉(zhuǎn)換為一個(gè)長(zhǎng)度為8的byte數(shù)組,數(shù)組每個(gè)值代表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轉(zhuǎn)為字符串的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自帶的方法,會(huì)忽略前面的?0??
  • ????????System.out.println(Integer.toBinaryString(0x35));??
  • ????}??
  • }??
  • ?輸出內(nèi)容就是各個(gè) bit 位的 0 和 1 值!

    ?

    根據(jù)各個(gè)Bit的值,返回byte的代碼:

  • /**?
  • ?*?二進(jìn)制字符串轉(zhuǎn)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')?{//?正數(shù)??
  • ????????????re?=?Integer.parseInt(byteStr,?2);??
  • ????????}?else?{//?負(fù)數(shù)??
  • ????????????re?=?Integer.parseInt(byteStr,?2)?-?256;??
  • ????????}??
  • ????}?else?{//?4?bit處理??
  • ????????re?=?Integer.parseInt(byteStr,?2);??
  • ????}??
  • ????return?(byte)?re;??
  • }??
  • ?


    總結(jié)

    以上是生活随笔為你收集整理的获取一个 Byte 的各个 Bit 值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。