问:
怎么表示二进制数?
比如:表示一个为01000001的二进制数据
byte b = 01000001;
以上写法我想不正确,正确的该怎么写呢?问:
一个byte&byte 的运算结果类型是?
byte b1 = 1;
byte b2 = 2;
b1 & b2 的结果怎么不是byte类型,而是int类型?为什么?
怎么表示二进制数?
比如:表示一个为01000001的二进制数据
byte b = 01000001;
以上写法我想不正确,正确的该怎么写呢?问:
一个byte&byte 的运算结果类型是?
byte b1 = 1;
byte b2 = 2;
b1 & b2 的结果怎么不是byte类型,而是int类型?为什么?
byte b=0xFF; //等价于b=255byte & byte的类型还是byte类型。byte + byte的类型应该是ushort,因为加法会产生进位,而&运算不会。
using System.Collections;
public class SamplesBitArray { public static void Main() { // Creates and initializes several BitArrays.
BitArray myBA1 = new BitArray( 5 ); BitArray myBA2 = new BitArray( 5, false ); byte[] myBytes = new byte[5] { 1, 2, 3, 4, 5 };
BitArray myBA3 = new BitArray( myBytes ); bool[] myBools = new bool[5] { true, false, true, true, false };
BitArray myBA4 = new BitArray( myBools ); int[] myInts = new int[5] { 6, 7, 8, 9, 10 };
BitArray myBA5 = new BitArray( myInts ); // Displays the properties and values of the BitArrays.
Console.WriteLine( "myBA1" );
Console.WriteLine( "\tCount: {0}", myBA1.Count );
Console.WriteLine( "\tLength: {0}", myBA1.Length );
Console.WriteLine( "\tValues:" );
PrintValues( myBA1, 8 ); Console.WriteLine( "myBA2" );
Console.WriteLine( "\tCount: {0}", myBA2.Count );
Console.WriteLine( "\tLength: {0}", myBA2.Length );
Console.WriteLine( "\tValues:" );
PrintValues( myBA2, 8 ); Console.WriteLine( "myBA3" );
Console.WriteLine( "\tCount: {0}", myBA3.Count );
Console.WriteLine( "\tLength: {0}", myBA3.Length );
Console.WriteLine( "\tValues:" );
PrintValues( myBA3, 8 ); Console.WriteLine( "myBA4" );
Console.WriteLine( "\tCount: {0}", myBA4.Count );
Console.WriteLine( "\tLength: {0}", myBA4.Length );
Console.WriteLine( "\tValues:" );
PrintValues( myBA4, 8 ); Console.WriteLine( "myBA5" );
Console.WriteLine( "\tCount: {0}", myBA5.Count );
Console.WriteLine( "\tLength: {0}", myBA5.Length );
Console.WriteLine( "\tValues:" );
PrintValues( myBA5, 8 );
}
public static void PrintValues( IEnumerable myList, int myWidth ) {
System.Collections.IEnumerator myEnumerator = myList.GetEnumerator();
int i = myWidth;
while ( myEnumerator.MoveNext() ) {
if ( i <= 0 ) {
i = myWidth;
Console.WriteLine();
}
i--;
Console.Write( "\t{0}", myEnumerator.Current );
}
Console.WriteLine();
}
}
/*
This code produces the following output.myBA1
Count: 5
Length: 5
Values:
False False False False False
myBA2
Count: 5
Length: 5
Values:
False False False False False
myBA3
Count: 40
Length: 40
Values:
True False False False False False False False
False True False False False False False False
True True False False False False False False
False False True False False False False False
True False True False False False False False
myBA4
Count: 5
Length: 5
Values:
True False True True False
myBA5
Count: 160
Length: 160
Values:
False True True False False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
True True True False False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
False False False True False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
True False False True False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
False True False True False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
*/
byte a=120;
byte b=211;
MessageBox.Show((a&b).GetType().ToString());
private void TestHex() {int a = 188;this.textBox1.Text = "";this.textBox1.AppendText("a(10) = " + a.ToString() + "\n");this.textBox1.AppendText("a(16) = " + a.ToString("x") + "\n");this.textBox1.AppendText("a(16) = " + a.ToString("X") + "\n");}
运行结果如下:
a(10) = 188a(16) = bca(16) = BC
这时候,我们可能有另一种需求,即为了显示结果的整齐,我们需要控制十六进制表示的长度,如果长度不够,用前导的 0 填补。解决这个问题,我们只需要在格式说明符“x”或者“X”后写上表示长度的数字就行了。比如,要限制在 4 个字符的长度,可以写成“X4”。在上例中追加一句:
this.textBox1.AppendText("a(16) = " + a.ToString("X4") + "\n");
其结果将输出 a(16) = 00BC。现在,我们还要说一说如何将一个表示十六进制数的字符串转换成整型。这一转换,同样需要借助于 Parse() 方法。这里,我需要 Parse(string, System.Globalization.NumberStyles) 方法。第一个参数是表示十六进制数的字符串,如“AB”、“20”(表示十进制的 32) 等。第二个参数 System.Globalization.NumberStyles 是一个枚举类型,用来表示十六进制的枚举值是 HexNumber。因此,如果我们要将“AB”转换成整型,就应该这样写:int b = int.Parse("AB", System.Globalization.NumberStyles.HexNumber),最后得到的 b 的值是 171。
byte a=120;
byte b=211;
MessageBox.Show((a&b).GetType().ToString());
结果为Int32
byte a=120;
byte b=211;
MessageBox.Show((a&b).GetType().ToString());
结果为Int32,其实这个结果我已经知道,我想知道的是为什么byte &byte =Int32????
别的也都是的int32
你试试byte a=120;
(a+1).GetType()帮你查查
位运算结果都是int32类型,因为cpu是32位的。
-----------------------------------------
你试试
long a=9;
long b=8;
MessageBox.Show((a&b).GetType().ToString());
所以为了保证不溢出,就返回Int32类型