首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按位使用C语言

问按位使用C语言
EN

Stack Overflow用户
提问于 2017-05-27 16:33:05
回答 2查看 209关注 0票数 1

考虑一下Dennis在C书中给出的如下陈述

按位和运算符&通常用于屏蔽一些位, 例如 N=N& 0177; 将除低阶7位n以外的所有数据设置为零.

关于位和运算符,我的理解如下:

11010010 & 01101010 = 01000010

也就是说,如果任何操作数中的对应位为0,则设置为0。

但是在上面引用的声明中,它被告知,除了最后的7位外,其他的位都是0。

如果我们在二进制中展开0177,它将是10110001 (8位),所以我们不能说低阶8位。我哪里出错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-27 16:36:53

引用C11,第6.4.4.1节,(强调地雷)

..。一个八进制常量由前缀可选地紧跟一个数字序列,即通过 7 only的数字。..。

因此,整数常量(如0177 )是八进制,与十进制127或十六进制7F相同。二进制表示形式给出了01111111,这是

..。将n__的低阶7位设置为零。

票数 1
EN

Stack Overflow用户

发布于 2017-05-27 16:35:38

您将掩码转换为177,就好像它是十进制一样。然而,情况并非如此:前导零使它成为一个八进制常数。

因此,它的二进制表示是

代码语言:javascript
复制
01111111

正如你所看到的,它遮住了除了下面7以外的所有位元。

在过去,八进制符号在PDP计算机程序员中很受欢迎,因为它让他们更容易“读”二进制代码。现在它已经不那么流行了,在定义二进制掩码时,十六进制符号大多取代了它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44219219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档