C# 位运算基本大全

1.原码 反码 补码

只用补码进行计算,且没有减法。只有用补码进行加法运算,具体原因,详见:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

因为为了让计算机的电路基础设计简单,只有加法,选择使用符号位,再因为通过原码进行正树和负数进行运算,显然不能实现,所以,增加反码,补码。一切都是为了设计更加简单。

利用反码进行减法,只能部分计算没问题。对于+0,和-0分别是0000 0000,1000 000,于是补码的出现解决了0的符号问题。这样用 0000 0000表示0,就不会存在-0的问题。而且可以用1000 000 表示-128。

利用补码,不仅仅修复了0的符号以及两个编码的问题,还能够多表示一个最低数,这就是为什么8位二进制使用原码或反码的表示范围为【-127,+127】,而使用补码则是【-128,127】。

因为机器使用补码,所以对于编程中常用到的32位int类型,可以表示的范围是:【-2^31,2^31-1】因为第一位表示的是符号位。而使用补码表示时又可以多保存一个最小值。

2.位运算 换算

  ①位 b 也叫比特位,是计算机数据最小的单位,用二进制0和1来存储。

  ②字节 byte,1 byte = 8 b,一个字节=8位

  ③字符 char,1 char = 2byte=16b,1个字符 =2 个字节 = 16位

  ④KB,1KB = 1024byte

  ⑤汉字,1个汉字 = 2 个字节=16位。

3.位运算 逻辑运算

 按位与 &

    1&1=1

    1&0=0

    0&0=0

 

 按位或 |

    1|1=1

    1|0=1

    0|0=0

 

  按位异或 ^ ,按照每一位进行异或,相同为0,不同为1

    

  按位取反 ~ 

    ~1=0

    ~0=1

 

 应用:

    判断数的奇偶性:与1&,若结果为1,则为奇数,反之为偶数。

    密码加密:两次异或同一个数之后结果不变,这个也可以用来在不会有溢出的风险下交换两个数的值。

  

  

转载于:https://www.cnblogs.com/u3ddjw/p/10826728.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是单链表的基本运算的C#实现: ```csharp using System; namespace LinkedListDemo { class Program { static void Main(string[] args) { LinkedList list = new LinkedList(); list.InsertAtEnd(10); list.InsertAtEnd(20); list.InsertAtEnd(30); list.InsertAtEnd(40); Console.WriteLine("Linked List:"); list.Display(); Console.WriteLine("Length of Linked List: {0}", list.Length()); Console.WriteLine("Deleting element 30 from Linked List"); list.Delete(30); Console.WriteLine("Linked List after deletion:"); list.Display(); Console.ReadKey(); } } class Node { public int data; public Node next; public Node(int value) { data = value; next = null; } } class LinkedList { private Node head; public LinkedList() { head = null; } public void InsertAtEnd(int value) { Node newNode = new Node(value); if (head == null) { head = newNode; } else { Node current = head; while (current.next != null) { current = current.next; } current.next = newNode; } } public void Delete(int value) { if (head == null) { return; } if (head.data == value) { head = head.next; return; } Node current = head; while (current.next != null) { if (current.next.data == value) { current.next = current.next.next; return; } current = current.next; } } public int Length() { int count = 0; Node current = head; while (current != null) { count++; current = current.next; } return count; } public void Display() { Node current = head; while (current != null) { Console.Write(current.data + " "); current = current.next; } Console.WriteLine(); } } } ``` 在主函数中,我们创建一个新的链表对象并插入四个节点。然后,我们打印链表并检查其长度。接下来,我们删除值为30的节点,并再次打印链表以确认节点是否被删除。 链表的节点由Node类表示,它包含一个整型数据和一个指向下一个节点的指针。LinkedList类包含链表的头节点,以及插入,删除,长度和显示链表的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值