c++ - 位运算的问题
PHPz
PHPz 2017-04-17 14:57:15
0
4
521
#include <iostream>

using namespace std;

int main()
{
    cout << (0b11 & (~0)) << endl;
    getchar();
    return 0;
}

为什么上面这个代码输出结果是3?就是想问为什么~0可以得到全是1的掩码,为什么不是只有一个1,像这样0000000000000000000001。

PHPz
PHPz

学习是最好的投资!

모든 응답(4)
大家讲道理

假设你的环境是32位,int为4字节。0等价于00000000 00000000 00000000 00000000,'~'按位取反,得到11111111 11111111 11111111 11111111
另外0b11是什么,这种写法好像没见过?

Ty80

因为~就是按位取反。全是0每个都取反就都是1

左手右手慢动作

既然0b11是二进制数,那么答案就很明显了。~0的结果是1,0b11和1进行与运算,结果保持不变,因此结果是0b11的十进制结果3。

Ty80

0b11其实是binary literal。
但这个是gcc extension,vc++的话 2015 Preview 才可以用。

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!