
本文共 1414 字,大约阅读时间需要 4 分钟。
namespace ConsoleApp1{ class Program { static void Main(string[] args) { int max = int.MaxValue; int min = int.MinValue; // 2147483647 Console.WriteLine(max); // -2147483648 Console.WriteLine(min); // 会溢出 int x = -min; // -2147483648 Console.WriteLine(x); int num = 12345678; // ~ 按位取反 int num2 = ~num; // -12345679 Console.WriteLine(num2); // 下面的待定 string numStr = Convert.ToString(num, 2).PadLeft(32, '0'); // 00000000101111000110000101001110 Console.WriteLine(numStr); string num2Str = Convert.ToString(num2, 2).PadLeft(32, '0'); // 11111111010000111001111010110001 Console.WriteLine(num2Str); } }}
namespace ConsoleApp1{ class Program { static void Main(string[] args) { int min = int.MinValue; // -2147483648 Console.WriteLine(min); // 求负数是按位取反在加1 int y = -min; // -2147483648 Console.WriteLine(y); String minStr = Convert.ToString(min, 2).PadLeft(32, '0'); // 10000000000000000000000000000000 Console.WriteLine(minStr); } }}
这段代码主要探讨了C#中的整数范围和按位取反操作。首先,程序定义了int max
为int.MaxValue
(2147483647),int min
为int.MinValue
(-2147483648)。在输出这两个值时,程序会遇到一个问题:直接使用-min
操作符会导致溢出,因为int.MinValue
是负数且已经是32位整数的最小值,无法通过简单的加法或减法来表示。
为了更深入理解这个问题,我们可以将这些数值转换为二进制字符串。通过Convert.ToString(num, 2).PadLeft(32, '0')
方法,可以将数值转换为32位二进制字符串,并左补零以保证长度为32。例如:
num = 12345678
的二进制表示为00000000101111000110000101001110
。num2 = ~num
(即num
的按位取反)表示为11111111010000111001111010110001
。
通过观察这些二进制表示,可以更直观地理解按位取反操作的效果。需要注意的是,按位取反操作在处理负数时会导致结果的符号发生变化,这是C#中的一个特性。
发表评论
最新留言
关于作者
