c# ~ 运算符 待研究
发布日期:2021-05-07 10:31:47 浏览次数:22 分类:精选文章

本文共 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 maxint.MaxValue(2147483647),int minint.MinValue(-2147483648)。在输出这两个值时,程序会遇到一个问题:直接使用-min操作符会导致溢出,因为int.MinValue是负数且已经是32位整数的最小值,无法通过简单的加法或减法来表示。

为了更深入理解这个问题,我们可以将这些数值转换为二进制字符串。通过Convert.ToString(num, 2).PadLeft(32, '0')方法,可以将数值转换为32位二进制字符串,并左补零以保证长度为32。例如:

  • num = 12345678的二进制表示为00000000101111000110000101001110
  • num2 = ~num(即num的按位取反)表示为11111111010000111001111010110001

通过观察这些二进制表示,可以更直观地理解按位取反操作的效果。需要注意的是,按位取反操作在处理负数时会导致结果的符号发生变化,这是C#中的一个特性。

上一篇:c# 取反运算符(!) 和 通过构造方法赋值并判断参数是否为空
下一篇:c# -> 箭头 操作符(运算符) And指针

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年03月23日 13时35分43秒