判断有符号和无符号的变量或类型[C/C++]
来源:互联网 发布:下载淘宝app官方软件 编辑:程序博客网 时间:2024/04/23 23:53
判断有符号和无符号的变量或类型[C/C++]
参考别人的代码,自己修改了一下。发现有符号数和无符号数,如果都是正数的话,二进制值是一样,因此不能简单地和0比较。
有几点值得注意的:
(1)有符号类型和无符号类型一起做运算,有符号类型会自动转成无符号类型;
(2)有符号数最高位是符号位,当有符号数是负数时,转成无符号数,则变成正数,而且一般是很大的正数;
(3)无符号数没有符号位,因此无符号数全部都大于等于0(>=0);
(4)如果一个数是正数,它的有符号和无符号的表示都是一样,只是编译器按照不同的类型解释它。
具体代码,如下:
#include <iostream>#include <iomanip>using namespace std;#define ISUNSIGNED(a) (((a) | 0x1 << (8 * sizeof(a) - 1)) > 0)#define ISUNSIGNED_TYPE(type) ((type)-1 > 0)int main(){// The values are the same (unsigned vs. signed), // but types are different by contextint i = 1;unsigned int ui = 1;// Set flagscout.setf(ios::showbase | ios::boolalpha);// Examples of using macrocout << ISUNSIGNED(i) << endl;cout << ISUNSIGNED(ui) << endl;cout << ISUNSIGNED_TYPE(signed short) << endl;cout << ISUNSIGNED_TYPE(unsigned short) << endl << endl;// Tell values by typescout << (i | 0x1 << ((8 * sizeof(i)) - 1)) << endl;cout << (ui | 0x1 << ((8 * sizeof(ui)) - 1)) << endl;cout << (unsigned)-1 << endl;cout << -1 << endl << endl;// Tell values ignoring typescout << hex << (i | 0x1 << ((8 * sizeof(i)) - 1)) << endl;cout << hex << (ui | 0x1 << ((8 * sizeof(ui)) - 1)) << endl;cout << hex << (unsigned)-1<< endl;cout << hex << -1 << endl;}
输出结果:
falsetruefalsetrue-214748364721474836494294967295-10x800000010x800000010xffffffff0xffffffff
参考资料:
1、http://zebras.diandian.com/post/2012-10-24/40041214058
- 判断有符号和无符号的变量或类型[C/C++]
- c 判断变量是有符号数还是无符号数-判断标识符是有符号还是无符号
- c语言有符号数和无符号类型计算
- C语言中有符号数和无符号数类型转换的用法深度解析
- 判断一个变量是无符号的还是有符号
- 判断一个变量是无符号的还是有符号
- int类型有符号与无符号内存中 -- C
- 有符号类型和无符号类型
- 无符号类型和有符号类型的比较是个坑
- [C]有符号数和无符号数
- C 有符号数和无符号数
- C无符号数和有符号数探讨
- C语言中的无符号数和有符号数
- c语言中的有符号数和无符号数
- c语言无符号和有符号数解析
- 关于C语言的char类型是有符号还是无符号
- 判断类型是无符号类型还是有符号类型
- C语言中有符号数和无符号数的比较
- 为eCos安装扩展组件包
- java连接数据库
- 黑马程序员-集合
- hdu 4628 字符串状压dp
- Java的内存分配、数据类型
- 判断有符号和无符号的变量或类型[C/C++]
- How to think like a Computer Scientist: 课后习题第十九、二十章
- Linux进程与调度学习
- unix树形目录结构
- 技巧:Linux 动态库与静态库制作及使用详解
- hdu 2159 FATE(二维费用背包)
- Linux几个版本的介绍-(Redhat,Debian,Ubuntu,Gentoo,FreeBSD)
- [各种面试题] 前后序遍历统计树
- stl_func STT_FILE