-
2021-06-16 20:05:50
这个问题是python struct 转bytes 的时候
struct.pack('Bh', 100, 1000000)
第二个值大于取值范围了 ,第二个值在取值范围之内就行.
同时还需要注意,H 的范围 65535, 注意下取值范围.
更多相关内容 -
c++中short的最小值SHRT_MIN减1不是SHRT_MAX的原因
2017-10-14 21:18:41最近在看一本一直都想看的书,c++ primer plus,本来想看的是c++ primer,结果买错了,反正都差不多。 在学习short,int,long的时候,看到书中这样写到:整型变量的行为就像... 那么,我们做 n_int+1时输出应为 IN最近在看一本一直都想看的书,c++ primer plus,本来想看的是c++ primer,结果买错了,反正都差不多。
在学习short,int,long的时候,看到书中这样写到:整型变量的行为就像里程表。如果超越了限制,其值将为范围另一端的取值。这句话我是这样理解的,假如我们设置了一个int型的整数,例如 int n_int = INT_MAX; 那么,我们做 n_int+1时输出应为 INT_MIN。结果的确是这样。但是short的有点特别,虽然不常见。下面看一段程序:
int c_char = CHAR_BIT; int n_int = INT_MIN; short n_short = SHRT_MIN; long n_long = LONG_MAX; long long n_llong = LLONG_MAX; cout<< sizeof n_int<<" "<<sizeof n_short<<" "<<sizeof(n_short - 1)<<" "<<sizeof(n_long)<<" "<<sizeof(n_llong)<<endl; cout<<n_int - 1<<" "<< n_short - 1 <<" "<<n_long<<" "<<n_llong<<" "<<c_char<<endl; //n_short是short类型的最小值,理论上减1应为SHRT_MAX的值,但结果不是
下面是程序结果:
解释:
程序中定义了n_int为int型的最小值,我们输出n_int-1时发现结果是int的最大值INT_MAX。结果第二行第一个数。但是在程序的第四行我们定义了一个n_short,赋值SHRT_MIN,然后输出n_short - 1,理论上说结果应该为32767,也就是SHRT_MAX。但是结果不一样,那么结果为什么会这样呢?
我们可以看输出中的第一行,此行输出的是各个数值在计算机中占的字节数。在输出sizeof(n_short - 1)时,结果是4,也就是数n_short - 1现在是一个整型数。在c++中规定short是两个字节,也就是16位。但是在计算机中,short存储占4个字节,因此,在short超出范围的时候会自动转换成整型的数。
这里额外在说一点,c++中基本整型有5种:char、short、int、long、long long(c++11中)。这里注意,char是基本整型。
-
shrt c++_SHRT_MIN常数,带C ++示例
2020-07-19 15:22:22shrt c++ C ++ SHRT_MIN宏常量 (C++ SHRT_MIN macro constant) SHRT_MIN constant is a macro constant which is defied in climits header, it is used to get the minimum value of a short int object, it ...shrt c++
C ++ SHRT_MIN宏常量 (C++ SHRT_MIN macro constant)
SHRT_MIN constant is a macro constant which is defied in climits header, it is used to get the minimum value of a short int object, it returns the minimum value that a short int object can store, which is -32768.
SHRT_MIN常量是在climits标头中定义的宏常量,用于获取short int对象的最小值,它返回short int对象可以存储的最小值,即-32768 。
Note:
注意:
The actual value depends on the compiler architecture or library implementation.
实际值取决于编译器体系结构或库实现。
We can also use <limits.h> header file instead of <climits> header as SHRT_MIN constant is defined in both of the libraries.
我们也可以使用<limits.h>头文件而不是<climits>头文件,因为在两个库中都定义了SHRT_MIN常量 。
Syntax of SHRT_MIN constant:
SHRT_MIN常量的语法:
SHRT_MIN
Example:
例:
Constant call: cout << SHRT_MIN; Output: -32768
C ++代码演示带有climits标头的SHRT_MIN常量示例 (C++ code to demonstrate example of SHRT_MIN constant with climits header)
// C++ code to demonstrate example of // SHRT_MIN constant with climits header #include<iostream> #include<climits> using namespace std; int main() { //prinitng the value of SHRT_MIN cout<<"SHRT_MIN: "<<SHRT_MIN<<endl; return 0; }
Output
输出量
SHRT_MIN: -32768
C ++代码演示带有limits.h头文件的SHRT_MIN常量的示例 (C++ code to demonstrate example of SHRT_MIN constant with limits.h header file)
// C++ code to demonstrate example of // SHRT_MIN constant with <limits.h> header file #include<iostream> #include<limits.h> using namespace std; int main() { //prinitng the value of SHRT_MIN cout<<"SHRT_MIN: "<<SHRT_MIN<<endl; return 0; }
Output
输出量
SHRT_MIN: -32768
翻译自: https://www.includehelp.com/cpp-tutorial/SHRT_MIN-constant-with-example.aspx
shrt c++
-
探讨有符号数与无符号数数据上溢出和下溢出问题
2021-01-14 07:10:29Printf(“%d,%d”,i.i 1);}输出结果为:2147483647,-2147483648这是因为加减运算过后,它们的值超出了它们对应的那种整数类型的表示范围,我们把这种现象称为溢出。注意:看清楚数字总是在循环的变化。如从最大...下面为有符号数的溢出:
#include
Void main()
{
Int i= 2147483647;
Printf(“%d,%d”,i.i 1);
}
输出结果为:2147483647,-2147483648
这是因为加减运算过后,它们的值超出了它们对应的那种整数类型的表示范围,我们把这种现象称为溢出。
注意:看清楚数字总是在循环的变化。如从最大2147483647,再加一后就变成了最小-2147483648。即循环的顺序是:
0— 2147483647— -2147483648— 0。
规律:
SHRT_MAX
1 == SHRT_MIN
SHRT_MIN-1 == SHRT_MAX
例如:
#include
int main(void)
{
short int
a=32767,b=32767,c;
a=a
b; //下面三行代码是实现两数交换的功能
b=a-b;
a=a-b;
c=sizeof(short int);
printf("a=%d,b=%d\n",a,b);
printf("sizeof=%d",c);
return
0;
}
结果:a=32767,b=32767
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
考察如下程序段:
int n=1,sum=0;
while(sum<=32767) {sum =n; n ;}
printf(“n=%d\n”,n-1);
乍看该程序时无错误,但事实上,上列程序中的while循环是一个无限循环,原因在于int型数的表示范围为-32768到
32767,当累加和sum超过32767时,便向高位进位,而对int型数而言,最高位表示符号,故sum超过32767后便得到一个负数,while条件当然满足,从而形成无限循环。此时,最好的解决办法是将sum定义为long
int型。
另外google的一道笔试题中也需要意识到溢出的存在
short cal(short x)
{
if(x==0)
return 0;
else
return x cal(x-1);
}
答案
x==0时,0
x>0时,x …
1
x<0时,x
(x-1) … (-32768)【溢出】 32767 …… 1,中途栈溢出
假如是short类型的负数来说,-32768减去1之后,变成32767,就是说对于有符号整数来说:最小的负数-1=最大的整数,最大的整数+1=最小的负数。
假如栈不溢出,那么将递归32768-x
32767次,最后的值按照上面是可以计算出来的
但是栈的空间有限,当栈溢出的时候,错误,强制退出。
在gcc下,测试,假如上述数据类型是char,最后是能计算出值的大小,栈的大小还够用。
下面为无符号数的溢出:
上面提到的是有符号数的溢出,下面是无符号数的溢出
在c语言的程序开发调试中,经常碰到非法操作导致程序强行终止。这种情况的发生多是因为程序指针的指向错误,数据溢出就是其中的一种,下面我将介绍一下常见的几种溢出情况。
1、无符号整数上溢
示例代码:
bool funcB(char
*s1,unsigned short int len1,char *s2,unsigned short int len2)
{
if (1 len1 len2
> 64)
return false;
char *buf =
(char*)malloc(len1 len2 1);
if (buf) {
memcpy(buf,s1;len1);
memcpy(buf
len1,s2,len2);
}
if (buf) free(buf);
return true;
}
这段代码存在整数上溢问题,当len1等于64,len2是0XFFFF,这段代码就会发生溢出。因为在定义为unsigned short
char 类型下1+0xFFFF=0,这样就绕过了1 len1 len2 >
64的条件判断。直接导致后面的代码中错误地分配64字节内存,在内存拷贝时将产生溢出错误。
我分析:无符号整数上溢出的意思就是:无符号整数a已达最大数,
1之后又从小开始计算:1+0xFFFF=0;不同于有符号数的是,1+0xFFFF=—0xFFFF(最小数SHRT_MAX
1 == SHRT_MIN );
2、无符号整数下溢
示例代码:
bool funcA(unsigned int
cbSize)
{
if (cbSize
< 1024)
{
char *buf = new
char[cbSize-1];
memset(buf,0,cbSize-1);
delete buf;
return true;
}
else
return false;
}
这是一个整数下溢的例子。当函数调用时,如果参数cbSize赋值为0,由于参数cbSize被定义为unsigned int
型,则(cbSize-1)= (0-1) = 0XFFFFFFFF,分配如此大的内存,后果可想而知!
我分析:无符号整数下溢就是:无符号整数a为最小值0,再-1后变成最大值,例如:(0-1) =
0XFFFFFFFF;同与有符号整数的是,SHRT_MIN-1 == SHRT_MAX。
----------------------------------
#include
short
int fac( short int x)
{
static short int y=1;
y*=x;
return
y;
}
int main(void)
{
int s=0;
short i;
for(i=1;i<=8;i )
s =fac(i);
printf("S=%d\n",s);
return
1;
}
运行结果:S=-19303
运行SETP:
Setp1:i=1 y=1 S=0
1=1
Setp2:i=2 y=2 S=1
2=3
Setp3:i=3 y=6 S=3
6=9
Setp4:i=4 y=24 S=9
24=33
Setp5:i=5 y=120 S=33
120=153
Setp6:i=6 y=720 S=153
720=873
Setp7:i=7 y=5040 S=873
5040=5913
Setp8:i=8
y=40320溢出
16位内存空间存储情况:1001,1101,1000,0000(即40320的二进制表示)
反求补码:SETP1(减1)得到:1001,1101,0111,1111
SETP2(按位取反)得到:0110,0010,1000,0000(即25216的二进制表示)
故:y=-25216 S=5913-25216=-19303
Setp9:i=9,for循环结束,执行下一句输出:S=-19303
(40320 1001 1101 1000
0000 反码:1110
0010 0111 1111 补码:1110 0010 1000 0000
0110001010000000为
25216 )
我解释:此代码中的y值40320的意思是,原先在程序中算出来值是40320,记住此时40320就是内存中的补码,同样也是原码,由于正数的原码、反码、补码都相同,然而这个补码表示的意思是:y已不再是40320,由于y为有符号整数,此时,补码40320对应的有符号原码是:-25216,所以才有故:y=-25216 S=5913-25216=-19303。
记住:程序中算出来的数据都是原码。当然,算出来的正数也表示补码!
------------------------------------
#include
void main()
{
char c1 =
128;//char在此只有八位
unsigned char c2 =
257;
short s1 = 65535;
//short
在此只有16位2^16=65536 2^15=32768
65535=1111 1111 1111
1111B(已为补码) ;由于有符号,就变成了
- 111 1111 1111
1111(已为补码)= - 32767,则其表示的原码为 -1. 因为 - 32767 (-1)= - 32768.
unsigned int s2 =
65537;
printf("%d,%d,%d,%d",c1,c2,s1,s2);
}
unsigned char c2 =
257这一个
在内存中8位是表示不完的
所以需要9位的二进制才能表示它的值
但一个unsigned
char只能存8位的值,所以这里就需要截断
char c1 =
128,char这是一个有符号位的类型
所以在计算它的值的时候,需要用补码方式计算
128在内存中是:1000 0000
(最高一位是符号位)
补码计算,按位取反,再加1得:1000
0000=128
因其符号位是1,所以是负数:-128
输出结果:-128,1,-1,65537
-
C++ 数值最大最小标识符一网打尽,INT_MIN/ INT_MAX/LONG_MIN/LONG_MAX 等等
2020-07-31 16:43:545 SHRT_MIN Minimum value for a variable of type short. -32768 SHRT_MAX Maximum value for a variable of type short. 32767 USHRT_MAX Maximum value for a variable of type unsigned short. 65535 (0... -
Min Number
2015-10-29 17:37:05}//find_min_i(1); } if(p_ch[index] < p_ch[i]) { int temp; temp = p_ch[i]; p_ch[i] = p_ch[index]; p_ch[index] = temp; } else { if(i == len - 1 ) break; n... -
C/C++中各种类型的最大最小值
2020-08-17 11:12:14C/C++中各种类型的最大最小值 需要导入#include<limits.h>...SHRT_MIN, SHRT_MAX 短整型最大/最小值 -32768, 32767 INT_MIN, INT_MAX 整型最大/最小值 -2147483648, 2147483647 LONG_MIN, LONG_MAX -
C++ 中的INT_MAX,INT_MIN数值大小操作
2021-03-24 10:26:56int占4字节32位,根据二进制编码的规则,INT_MAX = 2^31-1=2147483647INT_MIN= -2^31=-2147483648C/C++中,所有超过该限值的数,都会出现溢出,出现warning,但是并不会出现error。如果想表示的整数超过了该限值,... -
基于Linux下的GCC编译器的内部预宏定义与__attribute__属性
2021-01-07 22:18:01depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control -
C语言基础--预定义的宏
2021-07-27 13:55:487F #define __SHRT_WIDTH__ 16 #define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L #define __STDC_UTF_16__ 1 #define __DEC32_MAX__ 9.999999E96DF #define __FLT64X_DENORM_MIN__ 3.... -
利用透视变换进行坐标转换
2019-07-30 22:18:30_src.cols() <= SHRT_MAX && _src.rows() <= SHRT_MAX, ocl_warpTransform_cols4(_src, _dst, _M0, dsize, flags, borderType, borderValue, OCL_OP_PERSPECTIVE)) CV_OCL_RUN(_src.dims() <= 2 && _dst.isUMat... -
gx works2编程教程_教程2-如何编程
2020-07-09 05:23:25因此,要测试的完整限制是 SHRT_MIN -1 0 1000 1001 SHRT_MAX 另外,正如我所说,您应该检查范围中间的一些数字,随机说 -12378 -7342 -56 45 246 943 1873年 7324 23487 实际上,这是一个相当简单的函数,一个2... -
C语言short
2021-05-19 01:55:20short varname1 = value2; //简写形式参数参数描述short int定义 short 类型变量使用的类型。varname变量名。value可选,变量的初始值,该值不可以超过 short 类型的最大值。说明使用 short int 定义了一个 short ... -
Android-NDK-audio-echo
2021-05-07 22:19:28对象和接口的概念: 对象:提供一组资源及其状态的抽象 接口:提供特定功能的方法的抽象 对象与接口的关系: 对象暴露的接口,有以下三个方面决定: 1)对象的类型 2)应用程序在对象创建期间的,接口请求。... -
linux系统中查看gcc内置宏定义的命令方法
2021-01-10 12:28:18GNU C预定义了一系列的宏,这些宏都是以双下划线开始的 查看内置宏的命令 gcc -dM -E - < /dev/null [qipa250@localhost ~]$ gcc -dM -E - <...#define __FLT_MIN__ 1.17549435082228750797e -
C语言笔记 14_标准库&assert&ctype&errno&float&limits
2021-05-20 12:04:08宏 描述 flt_rounds 定义浮点加法的舍入模式,它可以是下列任何一个值: -1 - 无法确定 0 - 趋向于零 1 - 去最近的值 2 - 趋向于正无穷 3 - 趋向于负无穷 flt_radix 2 这个宏定义了指数表示的基数。 基数 2 表示二... -
c语言整数和浮点数的最大最小值
2021-05-18 09:09:42代码如下:#include #include #include int main(){printf(“CHAR_MIN = %d\n”, CHAR_MIN);printf(“CHAR_MAX = %d\n”, CHAR_MAX);printf(“SCHAR_MIN = %d\n”, SCHAR_MIN);printf(“SCHAR_MAX = %d\n”, SC... -
c头文件limits.h各种常量的范围问题
2015-09-24 04:18:51%d\n LONG_MAX = %d\n ULONG_MAX = %d\n LLONG_MAX = %d\n LLONG_MIN = %d\n ULLONG_MAX = %d\n", CHAR_BIT, CHAR_MAX, CHAR_MIN, SCHAR_MAX, SCHAR_MIN, 0,UCHAR_MAX,SHRT_MAX, SHRT_MIN, USHRT_MAX, INT_MAX, INT_... -
C语言标准库<limits.h>
2021-10-25 16:04:58SHRT_MIN -32768 short类型的最小值。 SHRT_MAX 32767 short类型的最大值。 USHRT_MAX 65535 unsigned short类型的最大值。 INT_BIT 32 int类型字节的比特数。 INT_MIN -2147483648 int类型的最小值。 INT_MAX ... -
预处理程序-如何在C / C ++文件中检测Android NDK的编译?
2021-06-03 13:59:59_ 1 #define __PRAGMA_REDEFINE_EXTNAME 1 #define __PTRDIFF_MAX__ 2147483647 #define __PTRDIFF_TYPE__ int #define __REGISTER_PREFIX__ #define __SCHAR_MAX__ 127 #define __SHRT_MAX__ 32767 #define __SIG_... -
C语言的整型溢出问题 int、long、long long取值范围 最大最小值
2021-05-19 04:30:01最大值、最小值 在#include存有各个类型的最大值和最小值 CHAR_MIN char的最小值 SCHAR_MAX signed char 最大值 SCHAR_MIN signed char 最小值 UCHAR_MAX unsigned char 最大值 SHRT_MAX short 最大值 SHRT_MIN ... -
查看RISC-V版本的gcc中默认定义的宏
2021-12-18 09:56:52_ 1.19209289550781250000000000000000000e-7F #define __SHRT_WIDTH__ 16 #define __FLT32_IS_IEC_60559__ 2 #define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L #define __STDC_UTF_16__ 1 #... -
linux gcc 里面的变量命名的陷阱
2017-06-29 10:32:28#define __FLT_DENORM_MIN__ 1.40129846432481707092e-45F #define __INT8_MAX__ 127 #define __UINT_FAST32_TYPE__ unsigned int #define __CHAR32_TYPE__ unsigned int #define __FLT_MAX__ 3.... -
Android原生(Native)C开发:查看编译器预定义宏
2021-06-03 14:18:59如下: #define __DBL_MIN_EXP__ (-1021) #define __FLT_MIN__ 1.17549435e-38F #define _WIN32 1 #define __CHAR_BIT__ 8 #define __WCHAR_MAX__ 65535U #define __DBL_DENORM_MIN__ 4.9406564584124654e-324 #... -
c--limits.h
2017-12-27 09:53:02我们知道过去的IEEE1003.1标准,也叫做POSIX。C中的一个优良传统是标量数据类型要以一种对每个计算机体系结构都很自然的方式表示。这个名叫limits.h的头文件更应该叫integer.h和float.h对应,但是因为linits.h的名字... -
CPP_Basic_Code_P3.1-PP3.7.6
2017-03-26 21:21:27//0-1=-1 sue -- ; //0-1>65535,整形溢出跳转 cout "Sam has " sam " dollars and Sue has " sue ; cout " dollars deposited." endl "Luck Sue!" endl ; return 0 ; } //P3.3 # include... -
为什么C预处理程序将单词“ linux”解释为常量“ 1”?
2020-04-04 16:02:57Why does the C preprocessor in GCC interpret the word linux (small letters) as the constant 1 ? 为什么 -
OpenCV代码提取:warpAffine函数的实现
2016-07-16 11:20:43return -1; } fbc::Point2f srcTri[3]; fbc::Point2f dstTri[3]; // Set your 3 points to calculate the Affine Transform srcTri[0] = fbc::Point2f(0, 0); srcTri[1] = fbc::Point2f(matSrc.cols - 1, ... -
makefile-理解
2019-06-26 18:49:32#define __FLT_MIN__ 1.17549435082228750797e-38F #define __GCC_IEC_559_COMPLEX 2 #define __UINT_LEAST8_TYPE__ unsigned char #define __SIZEOF_FLOAT80__ 16 #define __INTMAX_C(c) c ## L #define __CHAR_BIT...