无符号数字与负数(编程细节)
2018-04-01 15:48
417 查看
首先运行一段程序,结果出现之前可以预测一下结果哦!
—————————————————————分割线——————————————————————————————-
这是运行的结果:
3明显是大于-1 的,,那为什么会输出yes呢??
因为
再看size_t等同于什么类型:
这里说他类似与unsigned int 类型。在32位的系统中他相当于unsigned int 占有4个字节,,但是在64位操作系统下,它相当于unsigned long 占有8个字节,所以有可能它的值比Int大。。。
一般不要使用
这里的-1 会被 转化为一个很大的无符号数字,
使用上面的代码测试一下:
2的32次方就是4294967296,,故-1就是2的32次方减去1 。
一个32位的负数值是-N,那么转化成unsigned的值是2^32 - N 。
#include <iostream> #include <string.h> using namespace std; int main() { if(strlen("abc") < -1) { cout << strlen("abc")<<" yes1" << endl; } else { cout << "no1" << endl; } if(sizeof("abc") < -1) { cout << sizeof("abc")<<" yes2" << endl; } else { cout << "no2" << endl; } if(string("abc").size() < -1) { cout << string("abc").size()<<" yes3" << endl; } else { cout << "no3" << endl; } return 0; }
—————————————————————分割线——————————————————————————————-
这是运行的结果:
3 yes1 4 yes2 3 yes3
3明显是大于-1 的,,那为什么会输出yes呢??
因为
std::size_t strlen( const char* str );它的返回类型是std::size_t。
再看size_t等同于什么类型:
这里说他类似与unsigned int 类型。在32位的系统中他相当于unsigned int 占有4个字节,,但是在64位操作系统下,它相当于unsigned long 占有8个字节,所以有可能它的值比Int大。。。
一般不要使用
int lenght = strlen(string_a);这样的语句,他可能会超出int 范围,,当然应该也没人会一下输入那么长的字符串。
这里的-1 会被 转化为一个很大的无符号数字,
int a =-1; unsigned int b =a; cout<<b<<endl;
使用上面的代码测试一下:
b = 4294967295
2的32次方就是4294967296,,故-1就是2的32次方减去1 。
一个32位的负数值是-N,那么转化成unsigned的值是2^32 - N 。
相关文章推荐
- 用80x86汇编语言编程--过滤数字符号,并且大小写转换
- 编程中巧用“Alt+数字”输出特殊符号
- SWOOLE编程细节知识
- 有符号数在内存中是以其补码的形式存在的【如何求一个负数的补码】
- 无符号类型赋值负数,以及求绝对值
- 26个字母和数字符号ASCII码对照表
- 一个四位数的9倍仍然是四位数,但是数字次序相反,编程求此四位数
- 猜数字游戏——初探 python 界面编程
- 网络编程中error LNK2019: 无法解析的外部符号
- 编程实践中C语言的一些常见细节
- 用C语言编程,根据用户输入的半径计算球的表面积,体积,经过圆心的横切圆的面积以及以此球的半径、直径作为直径和高的圆柱体的侧面积、表面积和体积(将π定义成值为3.14的符号常量)
- 在SQL service或Oracle中将数字转换成有千位符号
- JavaScript学习总结-技巧、实用函数、简洁方法、编程细节
- 第二届战神杯线上编程挑战赛月赛第二题:数字游戏(Java)
- 编程需要注意的细节
- 【数字图像处理】Canny边缘检测详解及编程实现
- 四川大学线下编程比赛第一题:数字填充
- 有符号类型的最小负数的补码的由来
- 在文本框中输入数字(包括负数,0,正整数),如果为其他值,则显示空
- c++入门:输入一个字符串,将其分段输出,分段符为除字母和数字之外的符号。