JBTALKS.CC

标题: Java 一些疑问,疑惑 [打印本页]

作者: 毛毛小子    时间: 2009-7-18 05:38 PM
标题: Java 一些疑问,疑惑
Bitwise Operation ,这个东西我很混乱,需要上网找那些byte 号码吗?
比如1的话就是00000010 bit
可是到了反的话,-2 就是 11111110
| ,&,^ 这些算法我看得懂,只是不大了解反byte的数据
作者: 宅男-兜着走    时间: 2009-7-18 06:53 PM
标题: 回复 #1 毛毛小子 的帖子
哦? 00000010 不是2 吗? 我记得00000001 才是 1 ,00000000 是0
Java 的课本里好像有这类的东西。
作者: Super-Tomato    时间: 2009-7-18 07:09 PM
原帖由 毛毛小子 于 2009-7-18 05:38 PM 发表
Bitwise Operation ,这个东西我很混乱,需要上网找那些byte 号码吗?
比如1的话就是00000010 bit
可是到了反的话,-2 就是 11111110
| ,&,^ 这些算法我看得懂,只是不大了解反byte的数据




首先 1 的話應該是  0000 0001 才對
在程式中所有的語言最終會 compile 為機械語言(0 和 1)在電腦中做為溝通, 這是學習程式語言最開始會知道的,
要了解 binary 的話就要看你開始學習程式語言的時候有沒有把基本功打好

在開始學習語言的時候, 所有課本幾乎都會讓你了解甚麼是資料型態(Data Type),
而每個型態所佔用記憶體中多少個 byte 也都會清清楚楚的寫出,
所以 1 byte 就等於 8 bits, 也就是 8 個 0/1 組成(0000 0000 ~ 1111 1111)
0000 0000 = 0
1111 1111 = 255
怎麼計算出 1111 1111 會等於 255 呢, 接下來就看看這個例子的演算

= 0000 1000
= (0*2^7)+(0*2^6)+(0*2^5)+(0*2^4) + (1*2^3)+(0*2^2)+(0*2^1)+(0*2^0)
= 0+0+0+0 + 8+0+0+0
= 8

注 : 2 ^ 7 = 2 的 7 次方


再來如何從 8 轉換成 binary, 這是小學開始學習除法就學過的計算方式

2 |__8__ - 0
2 |__4__ - 0
2 |__2__ - 0
        1

紅色 = 餘數
把 8 除 2 得餘數 0,  再來 4 除 2 也剩下餘數 0, 2 除 2 的餘數還是 0, 最終剩下 1
把這些紅色的數字倒反寫出來即可得到 1000 , 也就是所要求出的 binary 值,
之後就看看自己的資料型態為多少 bytes 才在前方補上 0


p/s: 或者使用電腦中的 calculator 可計算



最後要說明的是 1 個 byte 可份為 unsigned 和 signed 值
unsigned = 0~255
signed = -128 ~ 128

而程式中預設一般都是為 signed, 所以在程式中遇到 signed 的變數的話, 機器語言就會把最左邊第一個 bit 作為標記 0 = signed, 1 = unsigned.





而 &, |, ^, ~, <<, >> 等的 bitwise operator 就是方便讓你做 bitwise 的運算
這些自己回首一下自己的課本或者電子書
一般上如果下載或購買書籍的話, 最好是找書名有 Bible 或 Black Book 等的字眼
這一類的書籍會把所有結構說明的很清楚, 自於自己喜不喜歡看那麼多字就可決定自己對程式語言的熟悉度了

[ 本帖最后由 Super-Tomato 于 2009-7-18 07:14 PM 编辑 ]
作者: 毛毛小子    时间: 2009-7-18 10:02 PM
标题: 回复 #3 Super-Tomato 的帖子
我的算法跟你不一样
我的是:

765  43210  
1111 1111

哦,
原来最大是255,大概跟Networking的差不多一样,ASCII 是 2^8 = 256,一个IP address里面的那些
作者: 宅男-兜着走    时间: 2009-7-18 10:32 PM
标题: 回复 #4 毛毛小子 的帖子
最最最最最简单简单 Binary 去 Decimal 的convert 方法 也是最快的。

有几种方法来转换。

方法1 : 所见即得

128    64   32    16      8     4      2      1
     1       1    1       1      1     1      1      1

把所有 1 的Decimal + 起来。
得到 255 == max 2^8.

                128    64  32  16  8   4    2     1
假设现在 1        0    0    0    0    0    1    0

128 + 2 = 130;

方法2 : 电脑计算
把电脑计算机转换成 Scrientific 模式就行了。


_______________________________________________________________________

另外就是, 请问 super-tomato 是怎么看到Action Script 里的"值"的? 很疑惑。
作者: Super-Tomato    时间: 2009-7-18 11:07 PM
原帖由 毛毛小子 于 2009-7-18 10:02 PM 发表
我的算法跟你不一样
我的是:

765  43210  
1111 1111

哦,
原来最大是255,大概跟Networking的差不多一样,ASCII 是 2^8 = 256,一个IP address里面的那些



資料型态最终都是以 binary 为基础, 所以怎么运用是看自己的了解和使用變化




原帖由 宅男-兜着走 于 2009-7-18 10:32 PM 发表
最最最最最简单简单 Binary 去 Decimal 的convert 方法 也是最快的。

有几种方法来转换。

方法1 : 所见即得

128    64   32    16      8     4      2      1
     1       1    1       1      1  ...


你是说 kelvinTang 嗎?? 只要有经验的 programmer 可以用透过几种方式來取得, 所以最好不要把 constant 值直接放在 AS 中,安全性太低了
作者: 宅男-兜着走    时间: 2009-7-18 11:48 PM
标题: 回复 #6 Super-Tomato 的帖子
  哦~ 就只是放爽的。
但是很好奇你是怎么读到的
可以方便透露透露下吗?
作者: 毛毛小子    时间: 2009-7-19 01:16 AM
标题: 回复 #6 Super-Tomato 的帖子
有点混乱中,需要时间来了解,>> 跟 <<我也是还在摸索当中   。。。
因为突然遇到这种东西,一时转不过来
作者: 毛毛小子    时间: 2009-7-19 01:26 AM
可是,你们说的我大致上都了解,正向值我可以了解
但是,我有个比较不明白,就是那个“反向值”,每次一反我就不大明白了
作者: Super-Tomato    时间: 2009-7-19 03:57 AM
原帖由 宅男-兜着走 于 2009-7-18 11:48 PM 发表
  哦~ 就只是放爽的。
但是很好奇你是怎么读到的
可以方便透露透露下吗?



呵~~~ 這沒甚麼稀奇的, 我用 Flash 那麼多年了, 多多少少能夠發掘一些方法
我不太喜歡談論怎麼去破解, 所以最普通的方法你可以嘗試從這個圖片中去了解,
當然要如何防止的方法也不難, 自己想想一下吧






原帖由 毛毛小子 于 2009-7-19 01:26 AM 发表
可是,你们说的我大致上都了解,正向值我可以了解
但是,我有个比较不明白,就是那个“反向值”,每次一反我就不大明白了


你只要把負值想像成一個圓周就不難理解了, -30度也就是 =330度, 這樣的提示可以讓你去慢慢研究掌握了 em0011
作者: 毛毛小子    时间: 2009-7-19 11:31 AM
标题: 回复 #10 Super-Tomato 的帖子
好像有点启示了
如果-30 = 330
那-10 = 310 ?
还是 -15 = 315 ?
作者: Super-Tomato    时间: 2009-7-19 04:52 PM
原帖由 毛毛小子 于 2009-7-19 11:31 AM 发表
好像有点启示了
如果-30 = 330
那-10 = 310 ?
还是 -15 = 315 ?



一個圓是360度, 我也不清楚你之前有沒有學過
但可以解釋的出來的都寫了, 你就多用心思考吧
作者: 毛毛小子    时间: 2009-7-20 12:16 AM
请教下,谁会用Eclipse?
我放import java.io.*; 之后,java.io.* 就会划线...显示有问题
因为我以前是用JCreator,现在换来用这个,我不会用掉...
作者: 毛毛小子    时间: 2009-7-20 12:42 AM
问题解决了
作者: 毛毛小子    时间: 2009-7-20 01:09 AM
真的是很奇怪,我以前用JCreator写,不会出现这个问题
现在用Eclipse写
package Blablabla;
import java.io.*;
public class Blablabla{
        public static void main(String[]argv){
                throws IOException{
                       
                }
        }
}


throws 就会出现Error
作者: 毛毛小子    时间: 2009-7-20 01:11 AM
标题: 回复 #15 毛毛小子 的帖子
哈哈
我发现是什么问题了...
解决了...
作者: 毛毛小子    时间: 2009-7-23 09:56 PM
我想问下:如果Java要算算式:"1*1",但是我要乘于巴仙,怎么放?

(1*1)*10% 肯定不对。。。
作者: 宅男-兜着走    时间: 2009-7-23 10:41 PM
标题: 回复 #17 毛毛小子 的帖子
1/100 * 1;

因为 1% 等于 0.01
作者: 毛毛小子    时间: 2009-7-23 11:12 PM
标题: 回复 #18 宅男-兜着走 的帖子
也对
刚刚没什么往这方面,一直在想要怎样才会算对而已 ><

PS: 感谢你跟番茄兄,都是我的恩人...




欢迎光临 JBTALKS.CC (https://mobile.jbtalks.cc/) Powered by Discuz! X2.5