P4基础数据类型及操作 以及 数据类型转换

P4基础数据类型及操作 以及 数据类型转换

本来来自

http://www.sdnlab.com/17882.html

一、基础数据类型及操作

P4语言中定义了5种基础数据类型,分别是:bool、bit、int(W)、varbit、int。

此处W代表长度,通常使用十进制数字表示,如bit

通常情况下,不同的数据类型之间可以相互转换,并且所有的二目运算符都要求数据类型保持一致,除了位移操作符(shifts)

(1)布尔型(bool)

布尔型,值为true或false,非整数型。布尔类型数据可以进行如下运算

运算符 描述
and 二目,操作数必须都为布尔型,运算结果布尔型
or 二目,操作数必须都为布尔型,运算结果布尔型
not 单目, 操作数必须为布尔型,运算结果为布尔型。
==,!= 测试是否相等或者不等,运算结果为布尔型

(2)无符号整型(bit)

无符号整形(unsigned integers)也叫位串(bit-string)。位串是以比特位形式表示的任意长度的数。位串以比特位形式表示的任意长度的数(如:bit<128>,表示长度位127比特的位串),但如果需要对位串进行某些数学运算,位串长度必须是8的整数倍。

支持以下运算。

运算符 描述
==,!= 测试是否相等或不等,运算结果为布尔型
<,>,<=,>= 无符号数比较,操作数的长度(W)要求相同,运算结果位布尔型
&,|,^ 按位运算符, 操作数的长度(W)要求相同,运算结果为无符号整型。
运算结果位操作数的补码
<<,>> 左移运算符操作数为无符号整型,右移运算符操作数必须是无符号数或非负整数。此运算符为逻辑位移
+ 单目,效果等于没有no_op
- 单目,计算结果位2W减去操作数,W为操作数长度
+ 双目,操作数长度要求一样。计算结果位操作数的算数和,且运算结果必须为W,超过截断
- 双目,操作数的长度(W)要求相同。计算结果为操作数的算术差。
* 无符号乘法运算,操作数的长度(W)要求相同,计算结果为无符号数且长度与操作数相等。

(3)有符号整形(int(W))

运算符 描述
==,!= 测试是否相等或不等,运算结果为布尔型。
<,>,<=,>= 有符号数比较,操作数的长度(W)要求相同,运算结果为布尔型。
&,|,^ 按位运算符,操作数的长度(W)要求相同,运算结果为无符号整型。
运算结果为操作数的补码。
<<,>> 左移运算符操作数为有符号整型,右移运算符操作数必须是无符号数或非负整数。此运算符为逻辑位移。
+(单目) 单目加运算,效果同no-op。
-(单目) 单目减运算,运算结果有符号整型,且长度与操作数相等。
+(双目) 二目加运算,操作数数据类型必须相同,运算结果也为同类型。
-(双目) 二目减运算,操作数数据类型必须相同,运算结果也为同类型。
* 有符号乘法运算,操作数的长度(W)要求相同,计算结果为有符号数且长度与操作数相等。

(4)变长位串(varbit)

变长位串(dynamically-sized bit-strings)不支持算术、比较、按位运算,甚至不支持类型转换。该数据类型在定义时会指定一个静态的最大宽度值,解析器会提取变长位串数据并设置一个值作为长度。

(5)无线精度整形(int (W) )

运算符 描述
==,!= 测试是否相等或不等,运算结果为布尔型。
<,>,<=,>= 有符号数比较,操作数的长度(W)要求相同,运算结果为布尔型。
&,|,^ 按位运算符,操作数的长度(W)要求相同,运算结果为无符号整型。
运算结果为操作数的补码。
<<,>> 左移运算符操作数为有符号整型,右移运算符操作数必须是无符号数或非负整数。此运算符为逻辑位移。
+(单目) 单目加运算,效果同no-op。
-(单目) 单目减运算,运算结果有符号整型,且长度与操作数相等。
+(双目) 二目加运算,操作数数据类型必须相同,运算结果也为同类型。
-(双目) 二目减运算,操作数数据类型必须相同,运算结果也为同类型。
* 有符号乘法运算,操作数的长度(W)要求相同,计算结果为有符号数且长度与操作数相等。
/,% 二目有符号除法和取模运算,操作数必须是正整数,运算结果为正整数。

二、数据类型转换

在P4中,对数据进行运算时大多时候都要保证操作数数据类型的一致性,P4也提供了基础的数据类型转换功能

From to 描述
bit<1> bool 0代表false,1代表ture
bool bit<1> false代表0,true代表1
bit int 保留所有比特位不变
int bit 保留所有比特位不变
bit bit 当w>w1时,保留低位W1位长度的数据,当w<w1时新增位补0
int int 当w>w1时,保留低位W1长度的数字,当W<W1时新增位补符号位
int bit 将整形转化为位串,保留低位w位长度数据,溢出需要发出警告并转化位负数
int int 将整型转化为位串,保留地位W位长度数据,溢出需要发出警告。

在P4程序中对数据进行运算时,除了用户在编写程序是手动转换数据类型,P4编译器在某些情况下也会自动进行类型转换,这种转换是强制的、自动的隐式类型转换。如下表

bit<8> x;
bit<6> y;
bit<8> z;
表达式 实际实现
x+1 x+(bit<8>)1
z<0 z<(int<8>)0
x<<13 0;//溢出时发出警告
x|0xFFF x|(bit<8>)0xFF;//溢出时发生警告
posted @ 2016-10-04 01:30  考拉小无  阅读(974)  评论(0)    收藏  举报