【问题标题】:Why can't we use bitwise operators on float & double data types为什么我们不能在浮点和双精度数据类型上使用位运算符
【发布时间】:2015-10-21 14:02:38
【问题描述】:

我是 c 新手,在这里我试图以存储在内存中的方式打印存储在 float 和 double 变量中的值。但是编译器不允许我对浮点和双变量使用按位运算符!我想知道为什么我们不能使用像'&'和'|'这样的按位运算符float 和 double 数据类型上的运算符,如果我们可以使用它会发生什么?它们是任何替代方法还是我们可以绕过这些问题?

这是我尝试处理的代码,

int main()
{
 float valF = 10;
 double valD = 10;

    printf("\n\t%i\t%li\n",valI,sizeof(valF));          
 for(i = 8*sizeof(valF); i >= 0 ; i--) 
{ 
printf("%i",(valF & (1<<i))? 1 : 0);
 }

 printf("\n\t%i\t%li\n",valD,sizeof(valS)); 

for(i = 8*sizeof(valD); i >= 0 ; i--)
{
 printf("%i",(valD & (1<<i))? 1 : 0); 
}

}

【问题讨论】:

  • 这些不是一元运算符。一元运算符是那些只接受一个操作数的运算符,例如 y = -x 中的一元减号
  • @ameyCU 不完全是骗人的,那个被标记为 C++。
  • @user694733 那里的答案涉及两种语言。

标签: c


【解决方案1】:

二进制&amp; 运算符是按位与运算符。它仅针对整型定义。

所有位运算符都是如此。

【讨论】:

  • 我猜它只是为整数类型定义的,因为浮点数的内部位结构原则上不是由语言标准决定的(实际上,它几乎总是 IEEE 754,对吧?),因此无法有意义地定义 te 运算符。但是,负整数也不是(它可能是一个或两个的补码),所以也许我遗漏了一些东西......
【解决方案2】:

C 语言只有特定的数据类型才支持特定的功能 例如,在 C++ 中,您可以添加 (+) 两个 int 变量(原始数据类型),但您不能添加两个辅助数据类型(用户已创建) 你必须为那个辅助数据类型定义那个 + 。 以这种方式制作的编译器仅提供那些使某些编程感觉的功能

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 2010-10-22
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    相关资源
    最近更新 更多