最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

自定義view之什么MeasureSpec

2023-06-19 20:16 作者:便宜酒  | 我要投稿



測量模式只有3種情況,用2bit就可以存放。int measureSpec:包含測量尺寸和測量模式。int型數(shù)據(jù)32個bit,將前2個bit用于存放測量模式,后面30個bit存放的是尺寸。取數(shù)時,不用每次都寫移位<<和取且&操作,用Android內置類MeasureSpec.getMode(),MeasureSpec.getSize()

這里的的尺寸大小getSize()并不是最終View的尺寸大小,而是父View提供的參考大小。

1.MeasureSpec.EXACTLY:表示設置了精確的值,一般當childView設置其寬、高為精確值(例如layout_width="100dp")、match_parent時,父容器會將其設置為EXACTLY;


2.MeasureSpec.AT_MOST:表示子布局被限制在一個最大值內,一般當childView設置其寬、高為wrap_content時,父容器會將其設置為AT_MOST;


3.MeasureSpec.UNSPECIFIED:表示子布局想要多大就多大,一般出現(xiàn)在AadapterView的item的heightMode中、ScrollView的childView的heightMode中;此種模式比較少見。


三種測量模式最高位對應什么?

0-unspecified 00-000000000000000000000000000000

1-exactly? 01-000000000000000000000000000000

2-at_most? 10-0000000000000000000000000000000(int的最小值)


為什么int的最小值是10-0000000000000000000000000000000?

因為int的最小值是-2^32,32bit只能表示到11-111111111111111111111111111111即-2^31,所以規(guī)定-0就是最小值-2^32。并且它沒有原碼和反碼。


計算機為什么用補碼?

計算機電路只有加法器,這是為了電路簡單,不是設計不出來減法器。人們要解決的是如何把減法變成加法。

使用原碼,符號位參與運算導致錯誤:1 - 1 = 1 + (-1) = [0000 0001]原+ [1000 0001]原= [1000 0010]原= -2


使用反碼,0出現(xiàn)了兩種表示:1 - 1 = 1 + (-1) = [0000 0001]原+ [1000 0001]原= [0000 0001]反+ [1111 1110]反= [1111 1111]反= [1000 0000]原= -0


使用補碼:1-1 = 1 + (-1) = [0000 0001]原+ [1000 0001]原= [0000 0001]補+ [1111 1111]補= [1 0000 0000]補=[0000 0000]補=[0000 0000]

負數(shù)的補碼是在反碼基礎上加了1的,相當于變大了,對于計算機來說是利用1 0000 0000溢出損失使之歸零,就不用通過運算得到0。

-128的由來如下:(-1) + (-127) = [1000 0001]原+ [1111 1111]原= [1111 1111]補+ [1000 0001]補= [1000 0000]補

-0的補碼來表示-128,所以-128并沒有原碼和反碼表示。(對-128的補碼表示[1000 0000]補,算出來的原碼是[0000 0000]原,這是不正確的)


補碼是怎么來的?

即計算機如何實現(xiàn)減法變成加法?

mod運算的數(shù)學定義:x mod y=x -( y * (x/y的下界)),對于負數(shù)也適用。

對于時鐘,回撥4小時等于前撥8小時,(-4) mod 12 = 8,8 mod 12 = 8,-4和8同余,記為(-4) ≡ 8 (mod 12)。

如果為一個負數(shù)找到正數(shù)同余數(shù),在模運算的線性可加性下,8也就代替了-4。


x ≡ x (mod 12)(反身性)

(-4) ≡ 8 (mod 12)

x + (-4) ≡ x + 8 (mod 12)(線性可加)


一個數(shù)的反碼,實際上是這個數(shù)對于一個模的同余數(shù),原碼的減法和反碼的加法通過“≡”建立了關系(反正不是等價關系,也不是一一對應關系)。這里看似用反碼也能正確運算,但不要忘了“同余”這個關系沒法通過正常加法得到0,只能通過溢出歸零的方式。而同余數(shù)全體加1,相當于增加了模的值。

1 ≡ 1 (mod 12)(正數(shù)的反碼是本身)

(-1) ≡ 11 (mod 12)

1 + (-1) ≡ 1 + 11 (mod 12)

反碼得12,原碼要么是12,要么是-0(在計算機中0當?shù)姆创a是0),而正確答案是0,如果

1 ≡ 1 (mod 13)(正數(shù)的補碼是本身)

(-1) ≡ 12 (mod 13)

1 + (-1) ≡ 1 + 12 (mod 13)

補碼得13,溢出,歸零。


參考:

https://mp.weixin.qq.com/s__biz=MzI0OTQwNDQxMw==&mid=2247483760&idx=1&sn=27cbdd41da43b5b71c9f7a3ae807fae6&chksm=e9934fe2dee4c6f4869f6d46004c2f3a76c3b5aefc1d1acc8acd9504c64e9a8143f21fe2c968&scene=27


https://blog.csdn.net/qq_48435252/article/details/127554025?ops_request_misc=&request_id=&biz_id=102&utm_term=MeasureSpec&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-127554025.nonecase&spm=1018.2226.3001.4187




自定義view之什么MeasureSpec的評論 (共 條)

分享到微博請遵守國家法律
托里县| 塔城市| 新营市| 阜新| 鸡西市| 信阳市| 南溪县| 新闻| 白山市| 望城县| 射洪县| 平南县| 资阳市| 都匀市| 华宁县| 炉霍县| 丰顺县| 汕头市| 鹿邑县| 将乐县| 北安市| 灵丘县| 平罗县| 天全县| 徐闻县| 平邑县| 阿鲁科尔沁旗| 兴宁市| 定安县| 宜黄县| 敖汉旗| 改则县| 洞口县| 延吉市| 精河县| 博白县| 温州市| 盐池县| 新兴县| 牙克石市| 宜都市|