int有符号和无符号类型内存 -- C

/*
int 有符号
			0xffffffff == -1
			0xfffffffe == -2
	最小		0x80000000 == -21 4748 3648
	最大		0x7fffffff == 21 4748 3647
			0x00000001 == 1
			0x00000000 == 0

int 无符号
	最大		0xffffffff == 42 9496 7295
	 		0x80000000 == 21 4748 3648
			0x7fffffff == 21 4748 3647
	最小		0x00000000 == 0
*/
int
main()
{
	/*	首先參数5为int型,32位平台为4字节,栈中分配4字节的内存,
	用于存放參数5。

%f符号会觉得这个參数是double型。printf函数中会将float自己主动
	转换成double,因此栈中读取8个字节。
		所以内存訪问越界。
		*/
	printf("5 = %f\n",5);

	/*	參数5.01为double型,存储时是8个字节。

%d仅仅读取当中4个字节。
		*/
	printf("5.01 = %d\n",5.01);

}

/*

[[email protected] test_class]# ./a.out

5 = 0.000000

5.01 = 1889785610

[[email protected] test_class]# ./a.out

5 = 0.000000

5.01 = 1889785610

[[email protected] test_class]# ./a.out

5 = 0.000000

5.01 = 1889785610

*/

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2024-10-08 05:56:12

int有符号和无符号类型内存 -- C的相关文章

int类型有符号与无符号内存中 -- C

/* int 有符号 0xffffffff == -1 0xfffffffe == -2 最小 0x80000000 == -21 4748 3648 最大 0x7fffffff == 21 4748 3647 0x00000001 == 1 0x00000000 == 0 int 无符号 最大 0xffffffff == 42 9496 7295 0x80000000 == 21 4748 3648 0x7fffffff == 21 4748 3647 最小 0x00000000 == 0 *

有符号和无符号类型运算

#include <iostream> int main() { unsigned i = 10 , j = 30 ; int m = -42 , n = 30 ; std::cout<<i-j<<std::endl; std::cout<<m*i<<std::endl; std::cout<<unsigned(-420)<<std::endl; return 0 ; } 结论:有符号和无符号类型相运算(加减乘除),先运算

有符号和无符号数据类型

原版出处:http://bbs.csdn.net/topics/340253678 C语言中提供了很多整数类型(整型),主要区别在于它们取值范围的大小.int代表有符号的整数,也就是说,用int声明的变量可以是正数也可以是负数,也可以是零,但是只能是整数.比如:int a = 3; int b = 0; int c = -5;以上这些都是合法的.int的取值范围因机器而异,一般而言,在较旧的PC上,int值在内存中一般是按2个字节(16位)进行存储的,在较新的PC以及工作站和大型机上,int值在

C语言的有符号与无符号,二进制整数的扩展与截断

前一节说了整数的表示方式,,也就是无符号编码与补码编码.这一届说一下二进制整数的扩展与截断,这部分内容与C语言挂钩.so,我们先看以下C语言的有符号和无符号数. C语言中的有符号数和无符号数 有符号数和无符号数的本质区别其实就是采用的编码不同,前者采用补码编码,后者采用无符号编码. 在C语言中,有符号数和无符号数是可以隐式转换的,不需要手动实施强制类型转换.不过也正是因为如此,可能你一不小心就将一个无符号数赋给了有符号数.就会造成出乎意料的结果,就像下面这样: #include <stdio.h

结构体位制 中存在 有符号 与 无符号 -- C

#include <stdio.h> #include <stdlib.h> #include <string.h> /* 有符号 结构体1 */ struct bits { int b1:5; /* 因为是int型,最大设置32位,由于int型是有符号整形, 所以这里5位为有符号类型. 11111 -1 10000 -16 01111 15 00000 0 */ int :2; int b2:2; /* 11 -1 10 -2 01 1 00 0 */ int b3:

C之有符号与无符号(二)

我们在 C 语言中经常会见到 unsigned 关键字,那么这是什么意思呢?在计算机内,数据类型分为有符号和无符号两种类型.它的最高位用于标识数据的符号:如果最高位为 1,表明这个数为负数:如果是0的则表明这个数为正数.那么我们就来做个试验验证下,代码如下所示: #include <stdio.h> int main() {     char c = -5;     short s = 6;     int i = -7;          printf("c : %d\n"

C语言 有符号、无符号

C语言 有符号.无符号 有符号无符号说明 一.有符号 signed char 8bit 取值范围:-2^7 ~ 2^7-1 . -128~127 int 32bit 取值范围:-2^31 ~ 2^31-1 . -2147483648~2147483647 long long 64bit 取值范围:-2^63 ~ 2^63-1 #include <stdio.h> int main() { signed int a = -1089474374; //定义有符号整型变量a printf("

Verilog -- 有符号与无符号运算

目录 Verilog中有符号与无符号的加法和乘法运算 无符号乘法和加法 有符号乘法和加法 有符号和无符号运算 参考: https://blog.csdn.net/vivid117/article/details/101427302 http://wscentity.lofter.com/post/1d00edbd_6476453 Verilog中有符号与无符号的加法和乘法运算 无符号乘法和加法 对于无符号的乘法和加法,没有什么好说的,就是直接用'*'和'+'. 有符号乘法和加法 有符号和无符号运

char类型到底是有符号还是无符号

根据c标准,char类型到底是有符号整数类型还是无符号整数类型,这取决于c实现,也就是c编译器的作者的想法:( 那么,如何快速的编写一个检测程序,查看当前编译器如何对char进行定义? #include <stdio.h> int main(){ printf("Type char is %ssigned char.\n",(char)-1>0?"un":""); return 0; } 我的机子输出: [[email prot