c语言中可以进行位运算的数据类型有什么

2020-11-22 05:43:03 字数 5831 阅读 9669

1楼:匿名用户

float 和double不可以,剩下的几个都行

2楼:李

只能用于整型操作数,即char,short,int,long类型

c语言位运算有什么作用

3楼:逍遙侠

可以用位运算做文件加密,比如一个文档,让其中的内容位运算,再打开就会显示一堆乱码,除非按特定的位运算变回来

c语言逻辑运算符两侧运算对象的数据类型可以是什么

4楼:宗政元彤

这里举一些例子

1,判断指针是否为空时:

int *ptrn = 0; // 这里创建的指向一个整数类型的指针为空

#define null 0

if(ptrn == null)//这里对为空的指针进行判断,这里的逻辑运算符两侧进行对比的是一个32bit的地址

2,判断某个函数返回是否为true或false

#define true 1

int isnull(char* ptrstring)

if(isnull(...) == true) //这里的语法也是可以的,在逻辑运算符两侧进行对比的是一个函数的返回值

3,0或者1int num = 10;

if(num)//这里执行的语法,也是正确的,尽管没有逻辑运算符,但因为num为10,大于0的数,所以程序会判断这个地方为true

4,非integer的数

if(fnum 0.0f)//这里进行判断的两个数是float浮点型,也是可以得到执行的

c语言中各数据类型不能进行哪些运算?

5楼:匿名用户

首先,你得明白什么是数据类型?我们知道数据在内存中存储都是按照字节为单位存储的,如何来表示一个整形或一个字符型等等数据,这就要用到数据类型了,所以,所谓的数据类型,其实就是用来标识数据占据几个字节等信息参数的,系统数据类型很好理解,自定义的数据类型(如用struct或class来定义的),其实也是一样的,它里面包含了各个简单数据类型的长度和位置。 其次,c++中的数据是“强类型”的,也就是说数据在进行赋值时,类型必须匹配才行,这很容易理解,如果两个数据的在内存中的长度都不一致,又怎么能赋值呢,即使长度一致,如果内部的小单位有偏移,其实也是不能赋值的,这就是数据类型要匹配的原因了,呵呵,例如:

struct;和int型其实长度是一致的,都是4个字节,但其内部每个字节表示的具体意义是不一样的。 当然c++也提供了数据转换的机制,自动转换和强制转换。c++的内部转换是char/short->int/long/float->double,也就是说将一个char值赋值给一个int型的,不需要你做操作,系统会自动转换,这样的转换时不会丢失数据的,但如果反过来,编译器就会报错了,原因很简单,数据有可能丢失了,比如将一个double类型的数据转换为int型,就丢失了内存中一半的数据,当然如果丢失的那部分是无意义的,这是的强制转换是有效的,如将int型的(-127,127)之间的数据转换为char型是有效的。

数据在作为函数参数传递的时候,也必须匹配类型,原因很简单,函数参数的传递是通过栈来完成的,如果参数类型不一致,会导致栈里的数据紊乱,传递的参数错位,而导致错误。例如你给pow求幂函数,原型是double pow(double d,int i);如果你传入的参数是(int,int),这显然在数据类型转换下是可行的;但如果你传的是(double,double)这时的第二个参数就编译不通过,如果强制转换,编译通过,但数据有可能会丢失了。

6楼:匿名用户

理论上所有数据类型之间都可以运算,包括所有运算。数据在内存都是以二进制数字存在,不管是加减乘除,还是左移右移都没问题。

7楼:匿名用户

除了指针类型(数组类),其他的基础类型什么运算都可以啊,就是算完后赋值类型要对

学习过的c语言程序的数据类型和运算符有哪些

8楼:匿名用户

c的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型

c语言的运算符包含的范围很广泛,共有34种运算符。c语言把括号、赋值、强制类型转换等都作为运算符处理。

()、 、 -> 、 .、!、 ++、 -- 圆括号、方括号、指针、成员、逻辑非、自加、自减

++ 、 -- 、 * 、 & 、 ~ 、! 单目运算符

+、 - 、 sizeof、(cast)

* 、 / 、% 算术运算符

+ 、 - 算术运算符

<< 、 >> 位运算符

< 、 <= 、 > 、 >= 关系运算符

== 、!= 关系运算符号

& 位与

^ 位异或

| 位或

&& 逻辑与

|| 逻辑或

? 、: 条件运算符

/= 、%= 、 &= 、 |= 、 ^= 赋值运算符

= 、 += 、 -= 、 *= 、

, 顺序运算符望采纳

9楼:匿名用户

我帮你捋顺一下思路吧

c基础 主要包括以下几6大方面

数据类型

各种运算符

三种控制结构(顺序 选择 循环)

函数数组

指针我当初和你一样,也是自学的,其实并不难,我看的是夏老师,讲的挺简明易懂的,特别适合我这样0基础的,上面说的这些就是讲的主要内容

c语言中不同数据类型的数据在运算时采用的规则有哪些 5

10楼:匿名用户

不同数据类型之间的转换有2种方式:隐式转换和显式转换。

隐式转换指的是默认做的一些转换式,比如整形和实型做混合运算(这里我说的运算是合法的运算,不会是取余这样对操作数有数据类型要求的运算),得到的结果是自动由精度低的或占位数低的数据类型向高的数据类型做转换,也就是上述问题得到的结果是实型。

显示转换:指的是使用强制类型转换运算符来进行强制的结果类型转换,这是人为的得到想要的类型的一种方法。

你所描述的不同数据类型的数据在运算时,采取的多是隐式转换。

11楼:匿名用户

当然是相同大小数据的等位运算了,参见汇编语言

12楼:

这个在一般的c语言教程里面都有介绍的 谭老大的教材里面说的很清楚

13楼:汤曼华袁秋

1、赋值运算中如果赋值号“=”两边的数据类型不同,赋值号右边的类型转换为左边的类型,这种转换是截断型的转换,不会四舍五入。

比如i是整型变量,则i=2.99;结果i的值为2直接舍去

#include

intmain()

测试结果为2.

c语言的位运算在实际操作中有什么用

14楼:匿名用户

位运算加速技巧

1. 如果乘上一

个2的倍数数值,可以改用左移运算(left shift) 加速 300%x = x * 2;

x = x * 64;

//改为:

x = x << 1; // 2 = 21

x = x << 6; // 64 = 262. 如果除上一个 2 的倍数数值,可以改用右移运算加速 350%x = x / 2;

x = x / 64;

//改为:x = x >> 1;// 2 = 21

x = x >> 6;// 64 = 263. 数值转整数加速 10%x = int(1.232)

//改为:x = 1.232 >> 0;4. 交换两个数值(swap),使用 xor 可以加速20%var t:int = a;

a = b;

b = t;

//equals:

a = a^b;

b = a^b;

a = a^b;5. 正负号转换,可以加入 300%i = -i;

//改为

i = ~i + 1; // not 写法

//或i = (i ^ -1) + 1; // xor 写法

6. 取余数,如果除数为 2 的倍数,可利用 and 运算加速 600%x = 131 % 4;

//equals:

x = 131 & (4 - 1);7. 利用 and 运算检查整数是否为 2 的倍数,可以加速 600%iseven = (i % 2) == 0;

//equals:

iseven = (i & 1) == 0;8. 加速 math.abs 600% 的写法1,写法2 又比写法1加速 20%//写法1

i = x < 0 ? -x : x;//写法2i = (x ^ (x >> 31)) - (x >> 31);//写法3i=x^(~(x>>31)+1)+(x>>31);9.

比较两数值相乘之后是否拥有相同的符号,加速 35%eqsign = a * b > 0;

//equals:

eqsign = a ^ b > 0;其它位运算技巧

1. rgb 色彩分离var 24bitcolor:uint = 0xff00cc;

var r:uint = 24bitcolor >> 16;

var g:uint = 24bitcolor >> 8 & 0xff;

var b:uint = 24bitcolor & 0xff;2. rgb 色彩合并var r:uint = 0xff;

var g:uint = 0x00;

var b:uint = 0xcc;

var 24bitcolor:uint = r << 16 | g << 8 | b;

15楼:匿名用户

这个就要涉及计算机组成原理,也就是数字在计算机中具体如何表示了,比如9×4=36,9在计算机中用2进制表示,1001,就是这个1001连续加上4次,但是如果移位的话就仅仅移两个位,1001向左移位变成100100就是36的二进制码了,比乘法要简单得多。

16楼:匿名用户

有用的,比如一个子程序用一个整数表示当前状态(节约) 比如这个变量是 int flag,这个二进制最后一位1表示有房子,0表示没有,倒数第2位1表示男的0表示女的....然后有很多种状态合一起..

这个时候要把一个人设成有房子,只要执行 flag |= 1, 要设置成男的只要执行flag|=1<<1;

判断男女是否有房也直接用 flag & 1 == 1 这样另外在一些运算密集的场景, 位运算比直接乘除法要快,比如做二分查找经常要除以2, 执行除法多麻烦, 移位1位多容易啊

c语言中位运算

17楼:匿名用户

0110101

1011001

0010001

结果不是1,是上面这个,但是可以说结果是非0

c语言逻辑运算符两侧运算对象的数据类型可以是什么

18楼:车挂怒感叹词

[最佳答案] 你的是什么语言?什么类型的逻辑运算? 如果是c语言,并且不是按位逻辑运算,答案肯定是d 因为c中的规定是非零数字表示真,0表示假,而逻辑运算就是对真假进行计算,所以在c中是任何类型的数据都可以进行逻辑运算,只要是非零数字就会被认为是真,再进行逻辑运算时按真处理。

如果是c语言,并且是按位逻辑运算(比如按位与&运算符),答案c正确,答案a肯定错。 因为对于按位逻辑,是进行的二进制按位计算,因此要求两侧操作数是整型,当然字符型数据可以按ascii码自动转换为整型,所以字符数据也可以进行按位逻辑运算。按位逻辑运算不可能只能对0或者1进行计算,因为那样的话就失去意义了,只能对0或者1操作还有什么意义,就是4种结果,可能吗?

数据类型后面的_t是什么意思,time_t类型是什么意思?c语言里有这个吗、不懂,求解

1楼 匿名用户 是一个结构的标注,可以理解为 type typedef 的缩写,表示它是通过 typedef 定义的, 而不是其它数据类型。 例如uint8 t,uint16 t,uint32 t 等都不是什么新的数据类型,它们只是使用typedef给类型起的别名,对于 的维护会有很好的作用。 ti...

c运算符-与什么等效,C语言的运算符和表达式有哪些

1楼 醒目鸟 1 表示比特位右移。效果与 除以 类似。右移一位即除以2,右移2位即除以4,右移3位即除以8 例如 数字8的二进制码为 00001000 右移一位后变为 00000100。 即00000100 4 2 还有一种含义 在c 里表示堆栈的指针位置。例如 this data 2楼 千锋教育 ...