我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 几个关于字符型变量和移位的问题 隐藏签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

老鼠尾巴




性别: 保密 状态: 该用户目前不在线
等级: *
发贴: *
威望: *
浮云: *
在线等级:
注册时间: *
最后登陆: *

5come5帮你背单词 [ novelty /'novəlti/ n. 新颖,新奇的事物 ]


几个关于字符型变量和移位的问题

字符型变量是什么?在内存中是以什么形式存储的,补码,原码还是反码?其它类型的数据呢?为何一个字符型变量可以赋值成“0xb9“,“0x83”之类的形式?“0x0f”是什么,为何一个字符型变量做位逻辑运算时可以改变变量的高低4位?
当表达式为负数的时候,右移左端不是符号位不变,然后补1吗?
为何这段程序我觉得不对?
main()
{
int b=3, c=-72;
printf("%d\n%d\n" ,c>>b,c<<b);
}
给出的结果是-9
            -576
-72=(1000 0000 0100 1000)2吗?
左右移动三位怎么会是那个结果?
期待热心的蝈蝈解答!
顶端 Posted: 2007-04-01 19:20 | 美国 [楼 主]
beggaren



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 304
威望: 0
浮云: 1133
在线等级:
注册时间: 2005-10-23
最后登陆: 2007-06-25

5come5帮你背单词 [ competition /kompə'tiən/ n. 竞赛,比赛 ]


很显然,带符号数移位不移动符号位的
顶端 Posted: 2007-04-01 19:30 | [1 楼]
老鼠尾巴




性别: 保密 状态: 该用户目前不在线
等级: *
发贴: *
威望: *
浮云: *
在线等级:
注册时间: *
最后登陆: *

5come5帮你背单词 [ fond /fond/ a. 喜欢的 ]


Quote:
引用第1楼beggaren于2007-04-01 19:30发表的:
很显然,带符号数移位不移动符号位的

是不移动符号位啊?但是它补的也全都是1啊?
顶端 Posted: 2007-04-01 19:40 | 美国 [2 楼]
beggaren



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 304
威望: 0
浮云: 1133
在线等级:
注册时间: 2005-10-23
最后登陆: 2007-06-25

5come5帮你背单词 [ sack /sæk/ n. 粗布袋,解雇;vt. 解雇 ]


你迷糊啦,仔细想想就想通了.
顶端 Posted: 2007-04-01 19:48 | [3 楼]
老鼠尾巴




性别: 保密 状态: 该用户目前不在线
等级: *
发贴: *
威望: *
浮云: *
在线等级:
注册时间: *
最后登陆: *

5come5帮你背单词 [ pattern /'pætən/ n. 图案,图样,形式,方式,模范,典范;vt. 仿制,模仿 ]


Quote:
引用第3楼beggaren于2007-04-01 19:48发表的:
你迷糊啦,仔细想想就想通了.

书上说的是符号位不变,并向右复制相应位数,不是都补1吗?
另外,期待蝈蝈解答其他几个问题。
顶端 Posted: 2007-04-01 20:11 | 美国 [4 楼]
kangtalc



性别: 帅哥 状态: 该用户目前不在线
头衔: 揍敌客·奇犽
等级: 希望之光
家族: 万人坑恋影部落
发贴: 1723
威望: 5
浮云: 1113
在线等级:
注册时间: 2005-09-21
最后登陆: 2008-06-29

5come5帮你背单词 [ bachelor /'bætələ/ n. 未婚男子;学士 ]


字符型变量一般是用一个字节来存储,共8位,在内存中是以2进制来存储,字符都被赋予ascii码值,好像是从0-255,0xb9的意思是这是一个字节,共8位,以每4位用一个16进制的数表示,比如0xb9就是2进制的10111001,你看前4位1011是不是16进制的b,后4位1001是16进制的9,同样的,0x83也是一个字节,2进制为10000011,0x0f表示00001111,因为一个字符变量也是一个字节长度,以2进制存储共8位,所以一个字符型的变量可以赋为0xb9等值,比如你有一个字符型的变量char ch = 'A',它是用ascii码值65存储在内存中的,用2进制就为01000001,换成16进制(记住,每四位用一个16进制数表示)那就是0x41

懂了吧?另外,负数在内存中是以补码表示的
数字向左移一位表示乘以2,向右移一位表示除以2


[ 此贴被kangtalc在2007-04-01 21:09重新编辑 ]

天上太陽  地上綠樹
我們的身體在大地誕生
我們的靈魂來自於天上
陽光及月光照耀我們的四肢

綠地滋潤我們的身體
將此身交給吹過大地的風
感謝上天賜與奇蹟與窟廬塔土地
願我們的心靈能永保安康

我願能與所有同胞分享喜樂
願能與他們分擔悲傷
請你永遠讚美窟廬塔族的人民
讓我們以紅色的火紅眼為證

顶端 Posted: 2007-04-01 21:04 | [5 楼]
老鼠尾巴




性别: 保密 状态: 该用户目前不在线
等级: *
发贴: *
威望: *
浮云: *
在线等级:
注册时间: *
最后登陆: *

5come5帮你背单词 [ wear /w/ə/ vt. 穿着,戴着,佩着;vi. 磨损,耗损 ]


Quote:
引用第5楼kangtalc于2007-04-01 21:04发表的:
字符型变量一般是用一个字节来存储,共8位,在内存中是以2进制来存储,字符都被赋予ascii码值,好像是从0-255,0xb9的意思是这是一个字节,共8位,以每4位用一个16进制的数表示,比如0xb9就是2进制的10111001,你看前4位1011是不是16进制的b,后4位1001是16进制的9,同样的,0x83也是一个字节,2进制为10000011,0x0f表示00001111,因为一个字符变量也是一个字节长度,以2进制存储共8位,所以一个字符型的变量可以赋为0xb9等值,比如你有一个字符型的变量char ch = 'A',它是用ascii码值65存储在内存中的,用2进制就为01000001,换成16进制(记住,每四位用一个16进制数表示)那就是0x41

懂了吧?另外,负数在内存中是以补码表示的
数字向左移一位表示乘以2,向右移一位表示除以2

谢谢蝈蝈咯
顶端 Posted: 2007-04-01 22:49 | 美国 [6 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.021139(s) query 7, Time now is:12-04 03:00, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号