2014-10-12 70 views
2

變量「格式」是一個字節和JavaScript倒像是:將Unityscript轉換爲C#:if(format&2)是什麼意思?

if(format & 2) // have normals 
    { 
     var normals = new Vector3[vertCount]; 
     ReadVector3ArrayBytes (normals, buf); 
     mesh.normals = normals; 
    } 

這裏來源:http://wiki.unity3d.com/index.php?title=MeshSerializer2

C#抱怨這一點,並說,它不能一個int隱式轉換爲布爾。

什麼是格式& 2完成,我應該在C#中檢查以評估它是否屬實?另外一些關於此事的進一步的閱讀材料將有所幫助..

+0

而在c#中的運算符是&&。 – kodaman 2014-10-12 12:38:47

+0

@ fredz0003:這是短路版本,它只適用於布爾操作數。 '&'操作符是布爾操作數的非短路版本,而數字操作數則是位運算符。 – Guffa 2014-10-12 12:49:23

回答

3

&運營商在Javascript是按位與運算符(參考:bitwise operators)。

按位進行操作,2將根據第二位是否設置在另一個操作數中給出值0或2。例如:

format 01101010 
2   00000010 
& ---------------- 
=   00000010 

在Javascript中,你可以在if語句中使用任何值作爲條件,它將被解釋爲一個布爾值。對於數值,任何非零(而非NaN)值將被視爲true

在C#中,&運算符在應用於整數時也可以用作位運算符和運算符。沒有自動轉換爲布爾值,因此您必須檢查按位運算的結果以獲得條件:

if ((format & 2) != 0) 
+0

@soshiki位和位運算符通常用於C#中,使用枚舉實現小型[sets](http://en.wikipedia.org/wiki/Set_(abstract_data_type))。爲進一步閱讀,請參閱[堆棧溢出:標誌枚舉屬性在C#中的含義是什麼?](http://stackoverflow.com/questions/8447/what-does-the-flags-enum-attribute-mean-in-c)和[James Michael Hare:C#Fundamentals:Enum Values with Bit-Flags](http://geekswithblogs.net/BlackRabbitCoder/archive/2010/07/22/c-fundamentals-combining-enum-values-with-bit- flags.aspx) – xmojmr 2014-10-13 16:46:15

2

我認爲這是位明智的操作,其中檢查設置字節的第二位。 (2不是位數,在基數2中只有10是2)。

if((format & 2) != 0) 
{ 
    .. 
} 

if((format & 2) == 2) 
{ 
    .. 
} 
1

&用於按位and操作。

|用於按位or操作。

你只能在整數上使用這些。


簡單的例子來讓你明白:

var r : int; 
r = Random.Range(0, 1000); 

if(r & 1) 
    // Odd. 

else 
    // Even.