首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

各位,有无unsigned与数据在内存中的存放有关系吗,求解

2013-02-04 
各位大虾,有无unsigned与数据在内存中的存放有关系吗,求解#include stdio.hint main(){int a0x10000000

各位大虾,有无unsigned与数据在内存中的存放有关系吗,求解
#include <stdio.h>
int main()
{
  int a=0x10000000;
  int b,i;
  int bits=sizeof(b)*8;
  char c;
  printf("请输入一个整数:");
  scanf("%d",&b);
  for(i=1;i<=bits;i++)
  {
   ((b&a))<0?(c='1'):(c='0');
   (i<bits)?printf("%c",c):printf("%c\n",c);
  }
}
此程序的作用为:
输入个十进制的数,输出其二进制形式,如果输入10,输出为000000000000000000000000001010;
但如果将a定义成unsigned int类型,输出为00000000000000000000000000000000,数据在内存中的存放与有无unsigned应该是不相关的吧?但为什么两次结果不一样呢,纳闷中。。。。。
[解决办法]
((b&a))<0?(c='1'):(c='0');
若b或者a有一个是unsigned,则这里的小于0永远为假,因为会发生cast。

所谓signed和unsigned,其实内存中存的东西没有太大差别,只是符号bit的解释不一样;
然后就是产生的汇编级别的运算不一样,比如这里的小于比较,又比如右移位。

[解决办法]

引用:
((b&amp;a))<0?(c='1'):(c='0');
若b或者a有一个是unsigned,则这里的小于0永远为假,因为会发生cast。

所谓signed和unsigned,其实内存中存的东西没有太大差别,只是符号bit的解释不一样;
然后就是产生的汇编级别的运算不一样,比如这里的小于比较,又比如右移位。


type promotion
[解决办法]
unsigned与内存无关,与数值范围有关。
[解决办法]
unsigned或signed与数据如何存放无关,与数据如何参与计算有关。
[解决办法]
引用:
unsigned或signed与数据如何存放无关,与数据如何参与计算有关。

参考汇编指令:
    CMP     比较.(两操作数作减法,仅修改标志位,不回送结果).
    JA/JNBE     不小于或不等于时转移.
    JAE/JNB     大于或等于转移.
    JB/JNAE     小于转移.
    JBE/JNA     小于或等于转移.
        以上四条,测试无符号整数运算的结果(标志C和Z).
    JG/JNLE     大于转移.
    JGE/JNL     大于或等于转移.
    JL/JNGE     小于转移.
    JLE/JNG     小于或等于转移.
        以上四条,测试带符号整数运算的结果(标志S,O和Z).
    JE/JZ       等于转移.
    JNE/JNZ     不等于时转移.
    JC          有进位时转移.
    JNC         无进位时转移.
    JNO         不溢出时转移.
    JNP/JPO     奇偶性为奇数时转移.
    JNS         符号位为 "0" 时转移.
    JO          溢出转移.
    JP/JPE      奇偶性为偶数时转移.
    JS          符号位为 "1" 时转移.

[解决办法]
楼主,你说你:如果输入10,输出为000000000000000000000000001010;



我认为你的代码无论输入什么进入,输出应该全是0,
你的代码编错了。
((b&a))<0?(c='1'):(c='0');在这句后面要添加一句:b <<= 1;
否则你这个循环就没有任何意义。

多嘴一句,你写这个代码虽然能运行,但是感觉很混乱,编码风格也不好,有待提高啊。

unsigned不会影响数据在内存中的存放
[解决办法]
如楼上所说,如果是unsigned,那么你的代码也会出错,还有你定义的mask值也不应该是
0x10000000应该是0x80000000才对。

((b&a))<0?(c='1'):(c='0');这句要改成

((b & a) == a) ? (c = '1') : (c = '0'); 

热点排行