为了账号安全,请及时绑定邮箱和手机立即绑定

c语言位运算问题??

c语言位运算问题??

C C# C++
小王同学2015 2016-05-20 13:24:07
1  为什么位运算的操作数只能是整型或者字符型数据以及他们的变体呢??2  为什么操作数的移位运算并不改变原来操作数的值呢??
查看完整描述

1 回答

已采纳
?
asd8532

TA贡献143条经验 获得超187个赞

计算机里的数据都是二进制保存的。无论是float还是double型的,实际保存的时候,都是0和1的组合,都是二进制的。
C语言中整型常量才能进行位运算,这是这个语言所作出的限制,与计算机没有什么关系。它如果被设计成允许其他类型数据可以进行位运算,也是可以的。只是由于数据保存方式的特殊性,其他类型数据做位运算从可理解性和实现效率方面来说,都有缺点,所以不适合做位运算。


就像有赋值语句 a=2;
然后左移两位 a<<2;
a还是2
并没有变成 8

查看完整回答
2 反对 回复 2016-05-20
  • 小王同学2015
    小王同学2015
    只是由于数据保存方式的特殊性,其他类型数据做位运算从可理解性和实现效率方面来说,都有缺点,所以不适合做位运算。 请您再详细解释下这句话
  • asd8532
    asd8532
    整形存储的时候其实本质就是按照二进制存储的,所以可以直接操作;其他类型的,例如浮点型,用科学计数法存储,二进制存储的是有效数字和次方,这样的按位运算毫无意义。可以看下IEEE754的规格化和非规格化浮点数的表示
  • 1 回答
  • 0 关注
  • 1812 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信