【319天】我愛刷題系列078(2017.12.21)

叨叨兩句

  1. 累P了~必須早睡了~

牛客網——java專項練習057

1

通過強制類型轉換之後,變量a, b的值分別爲( )short a = 128; byte b = (byte) a;
正確答案: B
A 128 127
B 128 -128
C 128 128
D 編譯錯誤java

一、Java中用補碼形式表示
二、第一位正負位,1表示負,0表示正。
三、原碼:一個數的二進制表示。
                 3的原碼00000011   -3的 原碼 10000011
四、反碼:負數原碼按位取反(符號位不變)。正數原碼自己。
                3的反碼00000011   -3的反碼11111100
五、補碼:正數是原碼自己。負數反碼加1。
                 3的補碼是00000011  -3的補碼是11111101
-------------------------------------------------------------------------------
int佔4個字節,32位
byte佔1個字節,8位
因此強轉時會截斷。前24位
---------------------------------------------------------------------------
在內存中表示形式( 注意java中是以補碼錶示一個數,因此表示形式是補碼,不是原碼! ):
int a = 3         00000000  00000000  00000000 00000011 (強轉byte時前面24個0被截斷)
byte b = 3      00000011
int a = -3       11111111  11111111   11111111   11111101 (強轉byte時前面24個1被截斷)
byte b = -3     11111101
----------------------------------------------------------------------------
已知負數的補碼,求負數:
補碼-1=反碼,反碼按位取反=該負數絕對值
已知負數,求負數的補碼:
一、負數原碼除了符號位,按位取反(不含符號位),加1。
二、負數絕對值的補碼(也就是原碼),按位取反(含符號位),加1
-------------------------------------------------------------------------------
例子:
java int 128轉爲byte,值:
128爲正數,補碼爲10000000(前面24個0省略),變成byte,只剩下10000000(byte爲1個字節),由於開頭是1,因此爲負數。即1個負數的補碼是10000000。反碼是01111111,原碼是1000000。是128.由於是負數,因此是-128。



【已知負數的補碼,求負數:
補碼-1=反碼,反碼按位取反=該負數絕對值
】
因此這裏的中的1首先只是用來做判斷,是正仍是負。
首位爲1,因此是負數。因此說明10000000是一個負數的補碼。
(爲撒連符號位的1也扯進去了?由於符號位不參與轉碼的前提是給到的是負數的原碼,而在這裏給到的是補碼【128是正數,正數的補碼,反碼都是其原碼】)
根據補碼-1=反碼,因此獲得反碼=10000000-1=01111111(反碼)---->按位取反獲得10000000,也就是128,由於該數是負的,因此最後的結果是-128

2

考慮下面這個簡單的例子,讓咱們看看reflection是如何工做的。code

import java.lang.reflect.*;
public class DumpMethods{
    public static void main(String[] args) {
        try {
            Class c=Class.forName(args[0]);
            Method m[]=c.getDeclaredMethods();
            for (int i = 0; i < m.length; i++) {
                System.out.println(m[i].toString());
            }
        } catch (Throwable e) {
            System.err.println(e);
        }
    }
}

其中"c.getDeclaredMethods"的做用是:
正確答案: D
A 取得類的公有方法對象
B 取得類的全部公有方法名稱
C 取得類的全部方法對象
D 以上選項都不正確對象

public Method[] getDeclaredMethods()返回類或接口聲明的全部方法,包括public, protected, default (package) 訪問和private方法的Method對象,但不包括繼承的方法。固然也包括它所實現接口的方法。
public Method[] getMethods()返回類的全部public方法,包括其繼承類的公用方法,固然也包括它所實現接口的方法
相關文章
相關標籤/搜索