sách gpt4 ai đã đi

Lập trình C - Toán tử Bitwise và Biết khi nào nên sử dụng

In lại 作者:行者123 更新时间:2023-12-03 04:04:22 28 4
mua khóa gpt4 Nike

我在《K&R II C 编程 ANSI C》一书中读到,“>>”和“<<”运算符控制位,当然,由于我是菜鸟,我不明白何时使用它们。我对弄清楚如何手动构建数据包很感兴趣,并且发现了以下代码片段:

unsigned short csum(unsigned short *buf, int nwords)
{
unsigned long sum;
for(sum=0; nwords>0; nwords--)
sum += *buf++;
sum = (sum >> 16) + (sum &0xffff);
sum += (sum >> 16);
return (unsigned short)(~sum);
}

我知道这会计算校验和,但我不明白这里发生了什么。 XD

显然这超出了我的技能范围,但我想我可以使用这个片段作为替罪羊来找出一些未解答的问题。 何时您知道何时使用按位运算符来获得某个值,为什么不直接加 (+) 或减 (-) 呢?另外,如果没有运算符,为什么 tổng hợp 旁边有一个十六进制 &0xffff ?

附注~sum Điều này có nghĩa là gì?

1 Câu trả lời

这不是一个问题,而是一大堆问题。 :)

  1. 当您想要将数字视为位的集合而不是整数时,可以使用按位运算符。说“我希望这个位模式向左移动两位”比创建数学上等效的运算要容易得多。它们在概念上是不同的;如果您将数字视为位,那么使用位运算符更有意义。
  2. & 0xffff 通过屏蔽所有高位来确保该值是 16 位。这假设系统的 unsigned long 至少有 16 位宽,这是一个非常安全的假设。 &(按位AND)通常用于此目的。看truth table对于逻辑连接并思考“假为 0,真为 1”,看看它是如何工作的。
  3. 十六进制常量之前的 & 是 C 的按位 AND 运算符,用于执行我上面描述的屏蔽。基本上,对于单位变量 a & b,当且仅当 Mộtb 时,结果为 1 > 是 1。运算符将此逻辑应用于其输入项中的每对位。
  4. ~ 运算符是 C 的按位反转,它“翻转”其参数的位。它通常用于创建蒙版。

关于C 编程 - 按位运算符并了解何时使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10899881/

28 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com