如果 int a和b都等于30亿 相加=60亿 那结果应该是long型的 为什么编译器自动给截成32位呢 为什么 两个都是有符号的相加溢出就提示呢 从《c陷阱与缺陷》上看到的 有点不明白 在问个include是静态连接还是动态链接? [ 本帖最后由 houtinghua 于 2008-5-13 17:56 编辑 ]
by houtinghua - C/C++ - 2012-11-27 14:32:07 阅读(4711) 回复(10)
实现一个128为无符号整数,32位机器上可以用4个unsigned long或16个char来表示。 对于16个char的方法,按其单位char,log的值实现时可以构造一个大小256的对数表数组。而对于4个unsigned long的实现,如何获得最好的性能?
我现在正在找一个哈希函数,能够将一个由IP地址转成的unsigned long型整数映射为在大于等于0,小于某值的整数索引。 目前我找到了两个,代码如下: 1. static inline unsigned hashkey(unsigned int dest_ip) { return (dest_ip* 2654435761UL) & HASH_TAB_MASK; } /*其中,2654435761UL是2到2^32 (4294967296)间接近于黄金分割的素数, (sqrt(5) - 1) / 2 = 0.618033989 2654435761 / 4294967296 = 0.618033987 */ 2....
闲来无事,写了段小C代码,贴上来玩玩,哈哈哈~ /***************************************************************** * 实现两个unsigned int 类型的整数相乘,结果保存在两个unsigned int变量 * 中。其基本思想是把unsigned int分拆为两个unsigned short分别相乘,就和 * 做2位十进制数的乘法一样一样的,只不过一个是逢10进位,一个是逢0x10000进位 *****************************************************************/ ...
今天在翻看自己的C语言笔记的时候看到有记 “8进制和16进制只能用来表达无符号的正整数” ,仔细想想不是太明白, 为什么不可以表示有符号的数据呢? 有什么更深层次的原因吗? 还望大侠们赐教啊 ~
这也是很有趣的问题,非常利于了解位模式。 题目:给定一个无符号整数(这里用无符号数是为了排除符号扩展的干扰),如何截断到指定的位数。例如给一个unsigned long a = 0xFFCE; 指定截断到8位得到的结果为0xCE,截断到4位得到的结果为0xE。好了,如果截断到3位?5位?怎么才能高效实现呢? 提示:参考http://bbs.chinaunix.net/viewthread.php?tid=872702&extra=page%3D1中whyglinux 所引用的c标准,线索就在里面哦:mrgreen: ...
如题,我看到如下代码 [code] char * my_inet_ntoa(unsigned int ina) { static char buf[16]; unsigned char *ucp = (unsigned char *)&ina; sprintf(buf, "%d.%d.%d.%d", ucp[0] & 0xff, ucp[1] & 0xff, ucp[2] & 0xff, ucp[3] & 0xff); return buf; } [/code] 我不明白为什么要和0xFF做&操作,我觉得写成 [code] char * my_inet_ntoa(unsigned i...
char * unsigned char * int unsigned int 理论上的区别我也知道,具体应用时怎样采用合适的形式呢(什么时候用有符号好 什么时候用无符号好) 谁能举例说明:)
MySQL版本:5.1.30 GUI工具:Navicat for MySQL 8.0.29 table name:client column name:IP(点段式的四节IP) 现在我有两个需求: 一、使用INET_ATON函数将四节点段式IP转为有符号整数或无符号整数存储 二、不用存储,但在建立的视图中使用INET_ATON函数将IP转换成整数,但它转换后的值是无符号整数,也就是值的范围0到4294967295, 这本来是挺好的,但我要导出到Access中去,Access的长整型仅支持-2147483648到2147483647,也就是...
请问为什么有符号正数0x8000001 加1 结果是0x80000002 而不是0x80000000 呢? 它的计算过程是怎样的? 0x80000001 的补码不是 1111 1111 1111 1111 1111 1111 1111 1111 吗?