关于unsigned用法
unsigned int b;b=-10;
printf("%d",b)此程序运行后输出为-10,但unsigned是无符号型,为何结果还有负号?
1. 你用int定义也好, unsigned定义也好, -10这个字面值整形常量内存中就是0xFFFFFFF6, 至于为啥学过计算机组成原理应该知道, 这个0xFFFFFFF6是-10的补码 补码在内存中的表现形式都是这样. 反汇编可以看到 这俩就是这两个变量的地址 存的都是这货 所以 打印出来的肯定都是一样的-10
2. 你可以做个实现 int a = 97, printf("%c %d\n", a, a); 打印出来应该一个是字符a, 一个是整形97
编译器只会按照你告诉他的格式去对内存中的那个数据举行格式化打印出来给你看, 并没有责任(也没有权利)对原始数据做任何修改
unsigned int a = -10并不会因为你定义了是unsigned类型 编译器强制去掉那个负号
相反 如果你真想看到编译器如何理解的unsigned
可以选择printf("%u\n", a);
这样编译器会把最高位不当成符号位而是当成2^31 加进去 ryxcaixia 发表于 2015-10-26 08:49
1. 你用int定义也好, unsigned定义也好, -10这个字面值整形常量内存中就是0xFFFFFFF6, 至于为啥学过计算 ...
那么 unsigned 存在的意义是什么 本帖最后由 ryxcaixia 于 2015-10-26 11:20 编辑
y290176346 发表于 2015-10-26 10:33
那么 unsigned 存在的意义是什么
所有的数据都可以利用void*进行传递
在c和c++还存在着无所不用其极的强制类型转换 一个定义为unsigned类型的数组 可不可以转换为char* short* void*?
完全可以
类型的意义 一个是告诉编译器将要按照某种类型 对内存的数据进行解释 int类型每次解释4个字节 short每次解释2个字节 unsigned 等忽略符号为 当成2^31的数字
我个人认为更多的是 只是加强代码的可读性 给人看的
页:
[1]