结构体位制 中存在 有符号 与 无符号 -- 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:1;
	/*
		1 -1
		0 0
	*/

};

/*
	无符号 结构体2
*/
struct bits
{
	unsigned int b1:5;
	unsigned int :2;
	unsigned int b2:2;
	unsigned int b3:1;
};

int
main()
{
	struct bits b;
//	int a = 0b1111111111111111;
	int a = 0b0100110101000101;

	memcpy(&b, &a, sizeof(b));
//	memcpy(&b, "EM", sizeof(b));
	printf("0x%X\n", b);
	printf("b.b1 = %d\n", b.b1);
	printf("b.b2 = %d\n", b.b2);
	printf("b.b3 = %d\n", b.b3);
}
/*
int a = 0b0100110101000101;
0x4D45
b.b1 = 5
b.b2 = -2
b.b3 = 0

int a = 0b1111111111111111;
0xFFFF
b.b1 = -1
b.b2 = -1
b.b3 = -1

int a = 0b0100110101000101;
0x4D45
b.b1 = 5
b.b2 = 2
b.b3 = 0

int a = 0b1111111111111111;
0xFFFF
b.b1 = 31
b.b2 = 3
b.b3 = 1

*/

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

时间: 2024-10-12 22:50:30

结构体位制 中存在 有符号 与 无符号 -- C的相关文章

结构体位制详解 -- C

我基本总结下面4部分: 1.占位大小问题. 2.字节对齐问题. 3.特殊保留位0. 4.该结构体在内存中存放位置. #include <stdio.h> #include <stdlib.h> #include <string.h> //基本概念 /* struct _M { (1) 类型 参数名 : 占位大小: (2) 类型 : 占位大小: } (1) 类型 -- int,unsigned(32位),short,char. 参数名 -- 同个结构体里面不能重名参数.

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 *

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

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

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中有符号与无符号的加法和乘法运算 无符号乘法和加法 对于无符号的乘法和加法,没有什么好说的,就是直接用'*'和'+'. 有符号乘法和加法 有符号和无符号运

有符号和无符号类型运算

#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 ; } 结论:有符号和无符号类型相运算(加减乘除),先运算

Java-java中的有符号,无符号操作以及DataInputStream

1. 无符号和有符号 计算机中用补码表示负数,并且有一定的计算方式:另外,用二进制的最高位表示符号,0表示正数.1表示负数.这种说法本身没错,可是要有一定的解释,不然它就是错的,至少不能解释,为什么字符类型的-1二进制表示是“1111 1111”16进制表示为FF,而不是1000 0001. 在计算机中,可以区分正负的类型,称为有符号类型,无正负的类型,称为无符号类型. 使用二进制中的最高位表示正负 一个字节为8位,按0开始记,那它的最高位就是第7位,2个字节,最高位就是15位,4个字节,最高位

C语言进阶剖析第二课--有符号和无符号

①计算机中的符号位 数据类型的最高位用于标识数据的符号 -最高位为1,表明这个数为负数 -最高位为0,表明这个数为正数 ②在计算机内部用补码表示有符号数 正数的补码为正数本身: 负数的补码为负数的绝对值各位取反再加1: ③在计算机内部用原码来表示无符号数 -无符号默认为正数 -无符号数没有符号位 对于固定长度的无符号数 MAX_VALUE + 1 =  MIN_VALUE MIN_VALUE - 1 = MAX_VALUE ④如果无符号数和有符号数相加,有符号数会转成无符号数,并且如果有符号数是