请教各位高手一个C语言赋值的问题 感谢!!!

chengliangLEO 2009-01-12 06:44:41
我在写程序中遇到个问题如下:
unsigned short a;
unsigned long b;
给b赋值以后,想让把b的值赋给a;该怎么办?我是直接让a=b;为什么出错了?
同理,定义:unsinged long long c;
long d;
让c=d也不行,像这样不同类型的值应该怎么赋,难道有对齐问题?
...全文
291 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
clc0925 2009-01-28
  • 打赏
  • 举报
回复
会有转换误差
Jesse0628 2009-01-17
  • 打赏
  • 举报
回复
a=(unsigned short)b;

右边的范围大,赋给左边的,会丢失数据
Trust_haitao365 2009-01-17
  • 打赏
  • 举报
回复

#include <iostream.h>

int main()
{
unsigned short a=0; // unsigned short 类型的范围是 0~65535.
unsigned long b=32765; // unsigned long 类型的范围是 0~4294967295.
a=(unsigned short)b; // 当直接转化时,会给出警告:数据可能丢失。而通过强制类型转换就可以了
cout << a << endl;

return 0;
}


yuxiangang060605 2009-01-17
  • 打赏
  • 举报
回复
类型不同, 要进行转换.
从低精度的转为高精度的,会有丢失.
从高精度的转为低精度的,自动转换.
xxgamexx 2009-01-17
  • 打赏
  • 举报
回复

#include <iostream.h>

int main()
{
unsigned short a=0; // unsigned short 类型的范围是 0~65535.
unsigned long b=32765; // unsigned long 类型的范围是 0~4294967295.
a=static_cast<unsigned short>b; // 通过强制类型转换太霸道了
cout << a << endl;

return 0;
}


我觉得 本身楼主这种需求就却缺少情理!!!!!!!!
xiongmg1986125 2009-01-15
  • 打赏
  • 举报
回复
强制类型转换下
gql1123 2009-01-15
  • 打赏
  • 举报
回复
初始化先。然后你在让a=b试试。类型不匹配应该不会出错。大不了告个警啥的。
fhinalibob 2009-01-15
  • 打赏
  • 举报
回复
强制转换吧
gkhome3976 2009-01-12
  • 打赏
  • 举报
回复
哦?刚说错了,不是低4位bit被赋值了。而是低16位bit了。呵呵。同样后面是高16位bit被截断了。
gkhome3976 2009-01-12
  • 打赏
  • 举报
回复
unsigned short范围:0~0xffff;
unsigned long范围:0~0xffffffff;
unsigned long赋值给unsigned short会产生截断。低4位会被赋值过去,而高4位则被截断。所以会丧失精度。
如果让编译器不报warning那么可以使用强制类型转换。
例如:
unsigned short a;
unsigned long b;
a = (unsigned short)b;
xinhua0910 2009-01-12
  • 打赏
  • 举报
回复
因为两种类型的长度,精度不一样,楼主可以查一下
long比那个长,当你把他赋给一个short时就会丢失精度,可以用强制转换试一下 eg:a=(long)b;
xidianxiancai 2009-01-12
  • 打赏
  • 举报
回复
一般使用强制类型转换就可以
unsigned short a;
unsigned long b;
a=(unsigned short)b;
这样的话值会被截断
如b=11111111,结果a=35527
unsinged long long c; /*这个在vc编译的不支持啊*/
long d;
子然君 2009-01-12
  • 打赏
  • 举报
回复
精度高的转换成精度低的 一般都会丢失数据
gooogleman 2009-01-12
  • 打赏
  • 举报
回复
哎,强制类型转换即可
nineforever 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 chengliangLEO 的帖子:]
我在写程序中遇到个问题如下:
unsigned short a;
unsigned long b;
给b赋值以后,想让把b的值赋给a;该怎么办?我是直接让a=b;为什么出错了?
同理,定义:unsinged long long c;
long d;
让c=d也不行,像这样不同类型的值应该怎么赋,难道有对齐问题?
[/Quote]

编译不会报错的,至多给个warning。当然运行时会发生截断,所以a=b赋值之后,有可能a!=b
forcal 2009-01-12
  • 打赏
  • 举报
回复
建议在下句之前,先检查b的值是否符合要求,符合就转换,否则就报错。
a=(unsigned short)b;
xiaoyisnail 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 chengliangLEO 的帖子:]
我在写程序中遇到个问题如下:
unsigned short a;
unsigned long  b;
给b赋值以后,想让把b的值赋给a;该怎么办?我是直接让a=b;为什么出错了?
同理,定义:unsinged long long c;
long d;
让c=d也不行,像这样不同类型的值应该怎么赋,难道有对齐问题?
[/Quote]

赋值右边的可以表示的整型范围比左边的大,所以会造成数据被截断,要复制得进行强制类型转换,如下:

a=(unsigned short)b;
waizqfor 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 chengliangLEO 的帖子:]
我在写程序中遇到个问题如下:
unsigned short a;
unsigned long b;
给b赋值以后,想让把b的值赋给a;该怎么办?我是直接让a=b;为什么出错了?
同理,定义:unsinged long long c;
long d;
让c=d也不行,像这样不同类型的值应该怎么赋,难道有对齐问题?
[/Quote]
精度高的转换成精度低的 一般都会丢失数据 所以编译器报错
如果非要赋值

a=(unsigned short)b
c=(unsinged long long)d(这个还真少用C99才有)
yyjjack123 2009-01-12
  • 打赏
  • 举报
回复
你这样转换会造成数据丢失吧,可以强制转换
nullah 2009-01-12
  • 打赏
  • 举报
回复
static_cast<type> value
加载更多回复(3)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧