注册 登录
编程论坛 C++教室

问个取反位运算符的问题,谢谢

gylin_1982 发布于 2007-09-17 20:22, 1519 次点击

unsigned short a = 10;
cout<<sizeof(a)<<endl; //输出2
cout<<sizeof(~a)<<endl; //输出4 (为什么???????)

是不是~a自己转换为int类型 (32位机器)
8 回复
#2
yuyunliuhen2007-09-17 20:49
是的 ,用这个测试一下就知道了

#include<iostream>
using namespace std;
int main()
{
unsigned short int a = 10;
cout<<sizeof(a)<<endl; //输出2
cout<<sizeof(~a)<<endl; //输出4
cout<<typeid(a).name()<<endl; //unsigned short
cout<<typeid(~a).name()<<endl; //int

return 0;
}
#3
aipb20072007-09-17 21:06
还真不知道这个,呵呵,顺便问下

~作用在变量上都是这个效果?还有其他什么转变?
谢谢!

[此贴子已经被作者于2007-9-17 21:07:03编辑过]

#4
gylin_19822007-09-18 14:16
回复:(yuyunliuhen)是的 ,用这个测试一下就知道了...
好的谢谢,好多保留字都没用过
有没有介绍这些保留字用法的文档??
#5
雨中飞燕2007-09-18 14:18
short 参与任何运算均会先转化为int



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.org/
#6
青格儿2007-09-18 17:34
用DEV-c++测试2楼程序,怎么输出:2
4
t
i

为什么是这样结果?请高手解释下,谢谢!
#7
yuyunliuhen2007-09-20 23:38
DEV C++是个例外,她对typeid支持的不是很好
#8
野比2007-09-22 12:22
是这样的,取反的操作是按双字进行的(32位机),因此
比如a=1,
a = 0x0001
取反,先补足a的高位
a = 0x0000 0001
~a = 0xffff ffff (双字,32位,4 bytes)
#9
风致2007-09-23 12:29

BCB和VC都运行不了啊!找不到typeifo,呵呵!

1