char a = -1; unsigned char b = 100; if (a > b) { cout << "a"; } else { cout << "b"; } 输出 b int a = -1; unsigned int b = 100; if (a > b) { cout << "a"; } else { cout << "b"; } 输出 a 有符号数和无符号数比较,好像都是转换为无符号数后再进行比较。第二个按这个理解没有错。因为a按符号取补码最大。 那第一个呢,该怎么解释?不大明白了。
by cuzzg - C/C++ - 2007-12-29 20:15:11 阅读(6515) 回复(5)
当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。
但是代码中为什么直接输出a+b会等于14?
#include
进程A (C语言编写)、进程B(java编写) A与B通信,A有无符号32位数字传给B,B这边如果用int型去存的话,有可能会得到一个负数(大于 2<<31-1),因此我想到用long去存,但是中间需要如何处理才能得到正数呢? int i = -1; long j = i; System.out.println(j); 得到的还是-1
大家帮我看看附件的代码. 在unix下没有问题. 在windows vc60下就有问题,感觉是windows下的"+"符号返回值不能超过32位. windows是windows xp 32位.cpu是intel双核64位的. unix是solaris10,64位的.
如果 int a和b都等于30亿 相加=60亿 那结果应该是long型的 为什么编译器自动给截成32位呢 为什么 两个都是有符号的相加溢出就提示呢 从《c陷阱与缺陷》上看到的 有点不明白 在问个include是静态连接还是动态链接? [ 本帖最后由 houtinghua 于 2008-5-13 17:56 编辑 ]
看到书上给的例题是 (11011)2×(10010)2=((11011)2<<1)+((11011)2<<4) 是不是错的呀 利用位运算解决无符号数乘法问题的思路哪位能给指点一下呢 谢谢
char * unsigned char * int unsigned int 理论上的区别我也知道,具体应用时怎样采用合适的形式呢(什么时候用有符号好 什么时候用无符号好) 谁能举例说明:)