| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1831 人关注过本帖
标题:关于位运算0求反输出-1
取消只看楼主 加入收藏
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
关于位运算0求反输出-1
程序代码:
#include<stdio.h>

int main(void)
{
    unsigned char a = 0;
    a = ~a;
    printf("%ld\n", a);
    return 0;
}

输出255

程序代码:
#include<stdio.h>

int main(void)
{
    unsigned short a = 0;
    a = ~a;
    printf("%ld\n", a);
    return 0;
}

输出65535
---------
上面都正确
但是
程序代码:
#include<stdio.h>

int main(void)
{
    unsigned int a = 0;
    a = ~a;
    printf("%d\n", a);
    printf("%ld\n", a);
    printf("%lld\n", a);
    return 0;
}

输出如下
图片附件: 游客没有浏览图片的权限,请 登录注册

这是为什么呢?
不是应该输出‭ 4294967295 ‬吗

[此贴子已经被作者于2017-2-23 21:01编辑过]

2017-02-23 14:07
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
收藏
得分:0 
回复 2楼 吹水佬
char a=0 即 a=0b00000000,取反就是 0b11111111 = -1
-----------------------------------------------------
我理解是unsigned char a=0 即 0000 0000,取反 是 1111 1111
对应10进制为255,输出是对的。

然后我把unsigned int a=0
输出改为了%lld,但是结果不对
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-02-23 16:08
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
收藏
得分:0 
回复 7楼 九转星河
但是%d 或者 %ld 都是输出-1
2017-02-23 16:48
快速回复:关于位运算0求反输出-1
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.115938 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved